我一个窗体中有很多控件,
如它们的name为a,b,c,d
如果我要启用或者禁用就直接设置a.Enabled,b.Enabled的BOOL值,但现在我不能通过这样直接实现,而我现在只有"a","b","c","d"这些字符
我想实现通过这些字符来实现这些控件的Enabled的属性,高手回答我,如何实现,谢谢!!!
如它们的name为a,b,c,d
如果我要启用或者禁用就直接设置a.Enabled,b.Enabled的BOOL值,但现在我不能通过这样直接实现,而我现在只有"a","b","c","d"这些字符
我想实现通过这些字符来实现这些控件的Enabled的属性,高手回答我,如何实现,谢谢!!!
{
if( con.Name == "a")
con.Enabled = false;
}
{
foreach( Control con in parent.Controls)
{
if( con.Name == name)
con.Enabled = enable;
if(con.Controls.Count >0)
{
SetCtrlEnabled(con,name,enable);
}
}
}
//调用
this.SetCtrlEnabled(this,"button3",false);
Type typeA = objA.GetType();
FieldInfo fiA = typeA.GetField("b",BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
MethodInfo meA = typeA.GetMethod("sample",BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
能不能解释一下呀~~谢谢
foreach( Control con in this.Controls)
{
if( con.Name == "a")
con.Enabled = false;
}
-----我来解释吧
A objA = new A(); -- 这个略
Type typeA = objA.GetType(); -- 得到该类的类型对象
FieldInfo fiA = typeA.GetField("b",BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);----- 在这个类型中获取属性(GetField),第一个是你的属性名,第二个是一组参数. 非公有|实例(非静态)|公有下面也相同之不过是执行反色的方法.可以有方法的参数与返回植,具体的去参照msdn.
MethodInfo meA = typeA.GetMethod("sample",BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
{
if( con.Name == "a")
con.Enabled = false;
}
例如,如果用反射,像楼上提到的:FieldInfo fiA = typeA.GetField("b",BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);,你可以把fia缓存起来,以后再调用时可以这样来用,fiA.SetValue(value,obj),这里的value是要设置的值,obj是要设置的对像,在这里就是this.
如果用遍历,得到某个可用字段的引用后可以缓存起来,以后直接调用.例如
//缓存时
Hashtable h = new Hashtable();
h["b"] = b;
//以后调用时
Control c = (Control)h["b"];
c.Enabled = false;