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

How do you create a C# property that can subscribe to another WinForm control at design time?

我想在控件中创建一个 属性 作为查看器的控件,该控件将能够连接到另一个非可视控件以显示其当前状态。在此示例中,假设查看器将仅显示 onlineoffline.

的状态

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

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

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

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

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

要在设计器中拥有可在设计时使用的非UI 元素,您可以从Component 继承。

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

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

和select来源是这样的: