Как я могу получить все элементы управления в пространстве имен? - PullRequest
4 голосов
/ 26 апреля 2011

Как я могу получить все элементы управления в пространстве имен? Например, я хочу получить элементы управления в System.Windows.Forms: TextBox, ComboBox и т. Д.

Ответы [ 3 ]

6 голосов
/ 26 апреля 2011

Понятие элемента управления в пространстве имен немного неясно.Вы можете использовать отражение, чтобы получить классы в сборке в заданном пространстве имен, которые являются производными от определенного базового типа.Например:

class Program
{
    static void Main()
    {
        var controlType = typeof(Control);
        var controls = controlType
            .Assembly
            .GetTypes()
            .Where(t => controlType.IsAssignableFrom(t) && 
                        t.Namespace == "System.Windows.Forms"
            );
        foreach (var control in controls)
        {
            Console.WriteLine(control);
        }
    }
}
5 голосов
/ 26 апреля 2011

это вернет все классы в указанном пространстве имен:

string @namespace = "System.Windows.Forms";

var items = (from t in Assembly.Load("System.Windows.Forms").GetTypes()
        where t.IsClass && t.Namespace == @namespace
        && t.IsAssignableFrom(typeof(Control))
        select t).ToList();
0 голосов
/ 26 апреля 2011

Ваш объект формы имеет член Controls типа ControlCollection.По сути, это список (с некоторыми другими интерфейсами под капотом) всех элементов управления.

РЕДАКТИРОВАТЬ: Согласно вашему комментарию, вам необходимо вернуть элемент управления обратно в текстовое поле.Сначала вы должны определить его как элемент управления.

foreach (var control in controls)
{
    if(control is TextBox)
    {
        (control as TextBox).Text = "Or whatever you need to do";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...