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

时间:2015-11-30 15:50:45

标签: c# .net winforms windows-forms-designer

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

我希望能够删除非可视控件,让我们在表单上将其命名为Heater IHeater,然后删除HeaterMonitor。我想进入HeaterMonitor的属性,对于自定义Source属性,请查看表单上当前所有IHeaters的列表。

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

我可以将现有模式作为模板吗?

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

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

1 个答案:

答案 0 :(得分:5)

要在设计器中拥有可在设计时使用的非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; }
}

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

enter image description here

以这种方式选择来源:

enter image description here