如何在设计时创建可以订阅另一个WinForm控件的C#属性?

我想在控件中创建一个属性,该控件将充当一个能够连接到另一个非可视控件以显示其当前状态的查看器。 在这个例子中,假设观众只会显示在线离线的状态

我希望能够删除一个非可视控件,让我们在窗体IHeater类型的IHeater ,然后放下HeaterMonitor 。 我想进入HeaterMonitor的属性,对于自定义Source属性,请查看当前表单上所有IHeaters的列表。

Source属性中选择实例( Heater1 )会将HeaterMonitor1订阅到Heater1生成的所有状态更新。

是否存在我可以作为模板遵循的现有模式?

如果它有所作为,我可以使用.net 3.5及更高版本。 我选择data-binding作为标记,但我不确定这是否正确,因为这不是数据库问题。 但它看起来类似于选择DataSource属性的DataGridView

编辑#1:根据到目前为止的评论,我认为我没有强调我想要得到的东西。 我希望属性编辑器在表单上列出符合条件的IHeater控件。 我没有创建我可以在运行时分配的常规IHeater属性的问题。

要在设计器中具有可在设计时使用的非UI元素,可以从Componentinheritance。

 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; } } 

然后您可以在设计模式中使用它们(在组件托盘中):

在此处输入图像描述

并以这种方式选择源:

在此处输入图像描述