如何在设计时创建可以订阅另一个WinForm控件的C#属性?
我想在控件中创建一个属性,该控件将充当一个能够连接到另一个非可视控件以显示其当前状态的查看器。 在这个例子中,假设观众只会显示在线或离线的状态 。
我希望能够删除一个非可视控件,让我们在窗体IHeater
类型的IHeater
,然后放下HeaterMonitor
。 我想进入HeaterMonitor
的属性,对于自定义Source
属性,请查看当前表单上所有IHeaters
的列表。
在Source
属性中选择实例( Heater1
)会将HeaterMonitor1
订阅到Heater1
生成的所有状态更新。
是否存在我可以作为模板遵循的现有模式?
如果它有所作为,我可以使用.net 3.5及更高版本。 我选择data-binding
作为标记,但我不确定这是否正确,因为这不是数据库问题。 但它看起来类似于选择DataSource
属性的DataGridView
。
编辑#1:根据到目前为止的评论,我认为我没有强调我想要得到的东西。 我希望属性编辑器在表单上列出符合条件的IHeater
控件。 我没有创建我可以在运行时分配的常规IHeater
属性的问题。
要在设计器中具有可在设计时使用的非UI元素,可以从Component
inheritance。
using System.ComponentModel; public interface IHeater { int Temperature { get; set; } } public class Heater : Component, IHeater { public int Temperature { get; set; } } public class HeaterMonitor:Component { public IHeater Source { get; set; } }
然后您可以在设计模式中使用它们(在组件托盘中):
并以这种方式选择源: