gpt4 book ai didi

C# 自定义控件属性

转载 作者:行者123 更新时间:2023-11-30 17:40:11 24 4
gpt4 key购买 nike

我正在构建一些使用 OPC 来控制某些工业自动化的应用程序。我已经决定为我将使用的标准内容(例如按钮和文本框)创建一些自定义控件可能是个好主意。我的主要原因之一是我觉得在理想模式下最终对象即按钮是保存有关它所引用的 OPC 项信息的对象,否则在典型应用程序中我的 Form 类会被我的大量变量污染思维范围比他们应该的更全局化。然后我开始使用按钮的 Tag 属性,但这需要一些对每个实例都相同的开销代码。我觉得正确的做法是将我想使用的控件子类化,并提供属性来配置每个控件。

考虑到这种情况,我真正的问题是这个。为了使其尽可能可移植,我决定应该有一个属性来定义 OPC 组。我这样声明了一个属性

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

这在我添加控件时显示在属性列表中,但我无法绑定(bind)此属性,即使我的 Form1 包含

public OPCConnectedGroup Connection1 = new OPCConnectedGroup();

我已经确定解决这个问题的方法可能是创建一个像 OPCGrp 这样的附加控件,它可以添加到表单中,然后控件可以引用它。为了测试,我添加了一个 Button 类型的属性,当我添加它并浏览到该属性时,它确实为我提供了 Form 上所有按钮的选项。我对这种方法没有太大问题我只是想确保我遵循原型(prototype)模式因为我将负责维护控制库但并不总是实现并且我试图将其简化为 1-2 步过程来实现一个控件。

谢谢马特

最佳答案

定义OPCConnectedGroup时可以继承Component类。

这样,如果您的 OPCButton 中有一个类型为 OPCConnectedGroup 的属性,那么在设计时,您可以将 OPCConnectedGroup 的实例放在表单,然后如果您在设计器中选择 OPCButtonOPCConnectedGroup 类型的属性将显示为下拉列表,您可以选择您放置的实例之一它的形式。

例子:

如果我有这样的 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,您可以从属性网格中选择一个 MyClass 实例:

enter image description here

关于C# 自定义控件属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34582692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com