2009-12-02 84 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