c# – 从用户控件代码隐藏,在设计模式下,如何获取父级中包含的所有控件名称?

使用的WinForms我编码一个组件的用户控件,我想它能够显示一个设计师的编辑形式,在那里我可以看到那里的组件位于窗体上的所有控件名称的列表.

我获得了组件用户控件的基本机制以及设计器编辑器的支持.我的问题与此无关.

假设我有一个表单,在IDE中,我将组件放在组件托盘和表单上的其他几个控件上.现在,我调用组件的设计器编辑器,然后显示控件名称列表.

这是一段代码:

internal class MyComponentEditor : UITypeEditor
{
    public override object EditValue
    (
        ITypeDescriptorContext context,
        IServiceProvider provider, object value
    )
    {
        var instance = context.Instance as MyComponent;
        var container = instance.Container;
        var controls = container.Components.Cast<Control>;
        var names = controls.Select (x => x.Name);
    }
}

这里,names变量应该包含所有控件的名称,但我只获取类型名称!

一定是显而易见的……;)

最佳答案 好的,我已经钉了它.

您需要执行以下操作以获取每个控件的控件名称:

(string)TypeDescriptor.GetProperties (control)["Name"].GetValue (control)

从我的例子来看:

var names = controls.Select (x => (string)TypeDescriptor
                                      .GetProperties(x)["Name"]
                                      .GetValue(x));
点赞