我正在构建一些使用OPC来控制某些工业自动化的应用程序。我决定为我将使用的标准事物(例如按钮和文本框)创建一些自定义控件可能是一个好主意。我的主要原因之一是,我以一种理想的方式感觉到最终对象,即按钮是保存有关它所引用的OPC项的信息的对象,否则在典型的应用程序中,我的Form类会被大量的变量污染。他们的思维范围应该更全球化。然后,我开始使用按钮的Tag属性,但这需要一些开销代码,每个实例都相同。我觉得做对的事情是我想使用的子类控件,并提供属性来配置每个控件。
考虑到这种情况,我真正的问题是这个。为了使其尽可能地便携,我决定应该有一个属性来定义OPC组。我宣布了这样的财产
public class OPCButton : Button
{
[Category("OPC")]
public OPCConnectedGroup
{
get { return _OPCGroup; }
set { _OPCGroup = value; }
}
}
当我添加控件时,这会显示int属性列表,但是即使我的Form1包含了我也无法绑定此属性
public OPCConnectedGroup Connection1 = new OPCConnectedGroup();
我已经确定解决此问题的方法可能是创建一个附加控件,例如OPCGrp,可以将其添加到窗体中,然后控件可以引用此控件。为了进行测试,我添加了一个Button类型的属性,当我添加它并浏览到该属性时,可以肯定地为它提供了Form上所有按钮的选项。我对这种方法没有很大的疑问,我只想确保Im遵循原型模式,因为我将负责维护控件库,但并不总是执行,而Im试图将其简化为1-2步的过程来实施一个控件。
谢谢马特
定义OPCConnectedGroup
时可以继承Component
类。
这样,如果你有一个类型的属性OPCConnectedGroup
在你的OPCButton
,那么在设计时,你可以把实例OPCConnectedGroup
的形式,然后如果你选择你OPCButton
的设计师,类型的该属性OPCConnectedGroup
会显示为一个下拉列表,你可以选择您在表单上放置的实例之一。
例:
如果我有这样MyButton
和MyClass
:
public class MyButton : Button
{
public MyClass MyClassInstance { get; set; }
}
public class MyClass : Component
{
public string SomeProperty {get;set;}
}
然后,您可以将一些(或一个)实例MyClass
放在表单的组件托盘上:
然后,如果您MyButton
在窗体上进行选择,则可以MyClass
从属性网格中选择一个实例:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句