2016-01-03 107 views
3

我正在构建一些使用OPC来控制某些工业自动化的应用程序。我决定创建一些自定义控件可能是一个好主意,这些控件适用于我将使用的标准功能,例如按钮和文本框。我的主要原因之一是,我觉得在一个理想的模式中,最终对象即按钮是持有关于它指向的OPC项目的信息的人,否则在典型的应用程序中,我的Form类受到我的变量的大量污染思维的范围更广泛,那么他们应该。然后我开始使用按钮的Tag属性,但是这需要一些开销代码,这对每个实例都是相同的。我觉得正确的做法是我想使用的子类控件,并提供属性来配置每个控件。C#自定义控件属性

考虑到这种情况,我真正的问题是这样的。为了使它尽可能便携,我决定应该有一个物业来定义OPC集团。我声明如下

public class OPCButton : Button 
{ 
    [Category("OPC")] 
    public OPCConnectedGroup 
    { 
     get { return _OPCGroup; } 
     set { _OPCGroup = value; } 
    } 
} 

属性这说明了INT财产清单时,我添加了控制,但我无法将这个属性绑定,即使我的Form1有

public OPCConnectedGroup Connection1 = new OPCConnectedGroup(); 

我已经解决了解决这个问题的方法是创建一个附加的控件,比如可以添加到Form中的OPCGrp,然后控件可以引用它。为了测试,我添加了Button类型的属性,当我添加它并浏览到属性时,它确实足够了,它为我提供了表单上所有按钮的选项。我没有这种方法的巨大问题,我只是想确保Im遵循原型模式,因为我将负责维护控制库,但并不总是执行,我试图把它放到1-2步的过程来实现一个控件。

感谢 马特

+0

什么的'OPCConnectedGroup'是这个类由您所做的类型? –

+0

正确。它实际上将是一个通用接口,如'IOPCConnectedGroup',并提供OPCGroup的自定义控件访问权限以注册项目/项目并将其删除 – MDK

+0

您可能会觉得这篇文章有用:[如何创建可以订阅另一个文章的C#属性WinForm控件在设计时?](http:// stackoverflow。com/questions/34002533/how-do-you-create-a-c-sharp-property-that-c​​an-subscribe-to-another-winform-contr) –

回答

1

当定义OPCConnectedGroup可以继承Component类。

这样,如果你有OPCConnectedGroup类型的属性在你OPCButton,那么在设计时,你可以把表格上的OPCConnectedGroup实例,然后如果你选择你的OPCButton在设计师OPCConnectedGroup类型的该属性将显示作为一个下拉列表,您可以选择其中一个放置在窗体上的实例。

实施例:

如果我有这样MyButtonMyClass

public class MyButton : Button 
{ 
    public MyClass MyClassInstance { get; set; } 
} 

public class MyClass : Component 
{ 
    public string SomeProperty {get;set;} 
} 

然后可以放的MyClass一些(或一个)实例上的形式的组件托盘:

enter image description here

然后如果您在表单上选择MyButton,您可以ch OOSE从属性网格MyClass实例之一:

enter image description here

+0

谢谢这就是我所期望的,但很高兴听到别人的意见。我也不知道继承Component。我想我会继承典型的控制 – MDK

+0

不客气。组件更适合这种情况,因为它们重量轻且不可视。 –

+0

如果我想让我的组件成为程序范围而不是表单作用域,最好的方法是什么?我发现组件需要在该窗体上创建,我想避免像'OPCConnectedGroup.SetGroup(IOPCGroup)' – MDK