如何获取命名空间中的所有控件?

时间:2011-04-26 08:10:22

标签: c# namespaces controls

如何获取命名空间中的所有控件?例如,我想获取System.Windows.Forms中的控件:TextBox,ComboBox等。

3 个答案:

答案 0 :(得分:6)

命名空间中控件的概念有点不清楚。您可以使用反射来获取给定命名空间中从特定基类型派生的程序集中的类。例如:

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);
        }
    }
}

答案 1 :(得分:5)

这将返回指定命名空间中的所有类:

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();

答案 2 :(得分:0)

您的表单对象有一个Controls成员,其类型为ControlCollection。它本质上是所有控件的列表(带有一些其他接口)。

编辑:根据您的评论,您需要将控件转换回文本框。首先,您必须将其识别为控件。

foreach (var control in controls)
{
    if(control is TextBox)
    {
        (control as TextBox).Text = "Or whatever you need to do";
    }
}