2011-04-26 49 views
4

如何獲得命名空間中的所有控件?例如,我想在System.Windows.Forms的控件:文本框,組合框等如何獲取命名空間中的所有控件?

+0

的可能的複製http://stackoverflow.com/questions/1558127/how-can-i-get-all-controls-from-a-form-including-controls-in-any-容器 – 2011-04-26 08:12:57

+1

或http://stackoverflow.com/questions/949246/how-to-get-all-classes-within-namespace – 2011-04-26 08:19:02

+0

@Gunner,請閱讀這個問題,他談論的是命名空間而不是鏈接中的表單容器指定。 – 2011-04-26 08:23:18

回答

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

我想知道是否需要在名稱空間比較中執行'startswith'而不是相等,以便包含子名稱空間中的控件。 – Nick 2011-04-26 08:18:36

+0

@尼克,是的,這是一種可能性,它將取決於具體要求。 – 2011-04-26 08:19:51

+0

天才。有了這個,我甚至可以從我的應用程序的自定義命名空間中獲取所有控件。正是我所尋找的。謝謝! – C4u 2016-06-07 11:50:02

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

還需要檢查該類是否爲控件。 – Nick 2011-04-26 08:17:37

+0

@尼克肯定,編輯檢查控制類型! ;) – 2011-04-26 08:24:07

+0

找不到System.Windows.Forms – deneme 2011-04-26 08:29:02

0

表單對象有Controls成員,其類型爲ControlCollection。它基本上是所有控件的列表(帶有其他一些接口)。

編輯:根據您的評論,您需要將控件轉換回文本框。首先,您必須將其識別爲控件。

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

查詢很多它的工作 – deneme 2011-04-26 08:34:23

+0

我可以創建一個字符串值的控制? – deneme 2011-04-26 08:43:37

+0

「System.Window.Forms.TextBox」如何從此字符串值創建文本框 – deneme 2011-04-26 08:44:13

相關問題