c#名称或类型未找到

时间:2009-12-02 08:14:18

标签: c# compilation

    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找不到类型或命名空间名称“类型”(您是否缺少using指令或程序集引用?)

它出了什么问题?仅仅针对上下文,我正在尝试浏览tabcontrol,并且在每个tabpage中我们都有一个用户控件,这就是为什么getChildAtPoint就是那个特定的位置。在所有用户控件中,我们有一个changefont函数,它将改变特定控件的字体大小....

谢谢:)

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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);
        }
    }
}