创建下拉菜单,通过该下拉菜单可以从Visual Studio窗体设计器中选择当前窗体中的其他控件

本文关键字:窗体 下拉菜单 选择 控件 其他 Studio Visual 创建 | 更新日期: 2023-09-27 18:26:01

我想复制visual studio已经为我做过的一些行为:在设计器中有一个下拉列表,允许我选择相同形式的其他组件。

以下面的例子为例:一个窗体和一个按钮。

从表单中,您可以设置一个"OKButton"属性。当您下拉对话框时,所有可能的按钮都会作为可能的选择显示在下拉列表中。

我有这样的东西,我希望一个文本框有一个名为"ServiceMember"的属性。当您展开它时,它将允许我从表单中所有类型为"ServiceObject"的公共成员中进行选择。

这有可能在任何自动意义上进行这项工作吗?如果没有,我不知道如何用当前对象中没有的名称填充组合框。他们是父窗体的成员吗?

创建下拉菜单,通过该下拉菜单可以从Visual Studio窗体设计器中选择当前窗体中的其他控件

如果您试图作为设计器的一部分来执行此操作(从标记而不是问题文本中的任何内容推断),则您在自定义控件上具有AttributeProvider属性且类型为IListSource的任何公共属性都应在属性设计器中表示为选择。即:

[AttributeProvider(typeof(IListSource))]
public object MyList { get; set; }

列表选择也是从枚举自动生成的-请参阅如何在WinForms自定义控件的控件设计器属性中添加组合框?-但在这种情况下,这可能对你没有用。

然而,这个列表的填充会有点痛苦-你可能可以使用反射来检查主机控件/窗体,以寻找从ServiceObject继承的公共成员-例如,请参阅检查类是否派生自泛型类,或者同样,你可以强制转换为类型,并查看是否得到非null返回:

ServiceObject potentialServiceObject = formMember as ServiceObject;
if (potentialServiceObject != null)
{
   // Add to list for dropdown
}