如何创建可以在设计时订阅另一个 WinForm 控件的 C# 属性?
How do you create a C# property that can subscribe to another WinForm control at design time?
我想在控件中创建一个 属性 作为查看器的控件,该控件将能够连接到另一个非可视控件以显示其当前状态。在此示例中,假设查看器将仅显示 online 或 offline.
的状态
我希望能够拖放一个非可视控件,我们将其称为 IHeater
类型的 Heater
,然后在窗体上拖放一个 HeaterMonitor
。我想进入 HeaterMonitor
的属性,对于自定义 Source
属性,请查看表单上当前所有 IHeaters
的列表。
在 Source
属性 中选择一个实例 (Heater1
) 将订阅 HeaterMonitor1
由 Heater1
生成的所有状态更新。
是否有我可以作为模板遵循的现有模式?
如果有所不同,我可以使用 .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来源是这样的:
我想在控件中创建一个 属性 作为查看器的控件,该控件将能够连接到另一个非可视控件以显示其当前状态。在此示例中,假设查看器将仅显示 online 或 offline.
的状态我希望能够拖放一个非可视控件,我们将其称为 IHeater
类型的 Heater
,然后在窗体上拖放一个 HeaterMonitor
。我想进入 HeaterMonitor
的属性,对于自定义 Source
属性,请查看表单上当前所有 IHeaters
的列表。
在 Source
属性 中选择一个实例 (Heater1
) 将订阅 HeaterMonitor1
由 Heater1
生成的所有状态更新。
是否有我可以作为模板遵循的现有模式?
如果有所不同,我可以使用 .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来源是这样的: