繁体   English   中英

在设计模式下,从背后的用户控件代码中,如何获取父控件中包含的所有控件名称?

[英]From a usercontrol code-behind, in design mode, how do I get all the controls names contained in the parent?

使用WinForms,我正在编写一个组件用户控件,以使其能够显示设计器编辑器窗体,在该窗体中可以看到组件所在窗体上所有控件名称的列表。

我获得了组件用户控件的基本机制以及设计编辑器的支持。 我的问题不是这个。

假设我有一个表单,在该表单中,我将组件放置在IDE中的组件托盘中,并在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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM