Как получить из всех элементов управления, содержащихся в родительском элементе, из выделенного кода usercontrol в режиме разработки. - PullRequest
4 голосов
/ 16 октября 2010

Используя WinForms, я кодирую пользовательский элемент управления Component, где я хотел бы, чтобы он мог отображать форму редактора конструктора, где я мог видеть список всех имен элементов управления в форме, где расположен компонент.

Я получил базовую механику пользовательского управления компонентом и поддержку редактора дизайнеров.Мой вопрос не об этом.

Допустим, у меня есть форма, в которой в 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 переменная должна содержать имена всех элементов управления, но я получаю только имя типа!

Должно быть что-то очевидное ...;)

1 Ответ

2 голосов
/ 18 октября 2010

Хорошо, я прибил это.

Для получения имени элемента управления для каждого элемента управления необходимо сделать следующее:

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

Из моего примера:

var names = controls.Select (x => (string)TypeDescriptor
                                      .GetProperties(x)["Name"]
                                      .GetValue(x));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...