2009-12-02 88 views
1
private void changeFont() 
    { 
     Control.ControlCollection controls = tabControl1.Controls; 
     foreach (Control control in controls) 
     { 
      TabPage t = (TabPage)control; 
      Control c = t.GetChildAtPoint(new Point(250, 250)); 
      System.Type type = typeof(c); //-->1st error 
      ((type)c).changeFont(fontModifier); //-->2nd error 
     } 
    } 

錯誤1類型或命名空間名稱「C」找不到(是否缺少using指令或程序集引用?) 錯誤2類型或命名空間名稱「類型」無法找到(您是否缺少使用指令或裝配參考?)C#名稱或類型沒有發現

它有什麼問題?只是爲了上下文,我試圖通過tabcontrol,並在每個tabpage我們有一個用戶控件,所以這就是爲什麼getChildAtPoint是特定的位置。在所有的用戶控件,我們有一個changefont功能會改變特定控件的字體大小....

謝謝:)

回答

2

要獲得實際類型的對象,而不是typeof,獲取類型名稱的類型(如typeof(string)),則需要使用c.GetType(),該類型獲取c指向的對象的實際類型。

至於(type)c,你不能這樣做:類型轉換隻能使用特定的類型名稱。如果您需要調用changeFont方法只在那些的,或者從您的自定義控制類型派生的控制,你應該做的:

if(typeof(MyControlType).IsAssignableFrom(c.GetType()) { 
    ((MyControlType)c).changeFont(fontModifier); 
} 

或者,更容易:

var myControl = c as MyControlType; 
if(myControl != null) { 
    myControl.changeFont(fontModifier); 
} 
+0

的第一個作品,謝謝:) 然而,第二個...... 我有: 的System.Type類型= c.GetType(); ((Type)c).changeFont(fontModifier); 是你的意思?因爲Visual Studio認爲Type(第二行)引用的是System.Type而不是變量。 – ladidadida 2009-12-02 08:23:55

+0

順便說一下'changeFont'方法在哪裏定義? – Konamiman 2009-12-02 08:25:55

+0

在我的用戶定義的控件中 – ladidadida 2009-12-02 08:26:48

0

如果所有的用戶控件有一個changeFont函數,我假定實現一個類/接口。

private void changeFont() 
{ 
    Control.ControlCollection controls = tabControl1.Controls; 
    foreach (Control control in controls) 
    { 
     TabPage t = (TabPage)control; 
     Control c = t.GetChildAtPoint(new Point(250, 250)); 
     if (c is <your class>) 
     { 
      (<yourclass>)c.changeFont(fontModifier); 
     } 
    } 
} 
+0

感謝這:) – ladidadida 2009-12-02 08:37:16