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函数,它将改变特定控件的字体大小....
谢谢:)
答案 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);
}
}
}