使用的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));