社区
C#
帖子详情
高难度问题!解决之后再加!高手进来看看
yuesongboy
2006-04-11 11:10:35
我一个窗体中有很多控件,
如它们的name为a,b,c,d
如果我要启用或者禁用就直接设置a.Enabled,b.Enabled的BOOL值,
但现在我不能通过这样直接实现,而我现在只有"a","b","c","d"这些字符
我想实现通过这些字符来实现这些控件的Enabled的属性,
高手回答我,如何实现,谢谢!!!
...全文
447
23
打赏
收藏
高难度问题!解决之后再加!高手进来看看
我一个窗体中有很多控件, 如它们的name为a,b,c,d 如果我要启用或者禁用就直接设置a.Enabled,b.Enabled的BOOL值, 但现在我不能通过这样直接实现,而我现在只有"a","b","c","d"这些字符 我想实现通过这些字符来实现这些控件的Enabled的属性, 高手回答我,如何实现,谢谢!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
oldhunter
2006-04-12
打赏
举报
回复
反射要经过绑定和调用两步,前者要遍历类成员定义的元数据,然后进行字符串对较.至于和遍历所有控件哪个快不好说,性能都不怎么好.如果以后还要操作这些字段,建议不管用哪种方法,在得到某个字段的引用后,用一个Hashtable进行缓存,以备后用.
例如,如果用反射,像楼上提到的: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;
xwy2258588
2006-04-12
打赏
举报
回复
顶,GZ
tiaoci
2006-04-12
打赏
举报
回复
为什么不能用遍历啊?
你没有试过怎么知道慢?
而且就算慢,你也可以通过一次遍历创建一个对照表
以后的查找就快了
zhoujijunnt
2006-04-12
打赏
举报
回复
顶,GZ
wls12342004
2006-04-12
打赏
举报
回复
完了,来晚了,利用反射吧,楼上的方法感觉都可以的.我以前用过.行的
guodawu
2006-04-12
打赏
举报
回复
还是用Foreach循环遍历比较好,而且比较清晰易懂。
yuesongboy
2006-04-11
打赏
举报
回复
我需要反射的解决方案
wfhlxl
2006-04-11
打赏
举报
回复
public void SetCtrlEnabled(Control parent, string name, bool enable)
{
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);
yuesongboy
2006-04-11
打赏
举报
回复
反射怎么用啊?我就是想知道用反射
copico
2006-04-11
打赏
举报
回复
同意楼上的解法
真相重于对错
2006-04-11
打赏
举报
回复
或者用反射
真相重于对错
2006-04-11
打赏
举报
回复
foreach( Control con in this.Controls)
{
if( con.Name == "a")
con.Enabled = false;
}
yuesongboy
2006-04-11
打赏
举报
回复
不能通过遍历当前控件来实现!!!
sweig0721
2006-04-11
打赏
举报
回复
foreach( Control con in this.Controls)
{
if( con.Name == "a")
con.Enabled = false;
}
zhouheng123456
2006-04-11
打赏
举报
回复
显然是foreach性能好..
不信自己试~~~
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);
Kshatriya
2006-04-11
打赏
举报
回复
反射性能極差
winteryoung84
2006-04-11
打赏
举报
回复
同意用反射。不过我确实不知道反射跟 foreach 比哪个性能好。
如果楼主需要用反射,看看我的 blog: http://blog.csdn.net/efijki/archive/2006/04/06/652993.aspx
内容很初级,但你可以看个大概,然后自己写一下就明白了
yuesongboy
2006-04-11
打赏
举报
回复
如果我有100个控件,那我一个字符串都要遍历一次,每次都在100个中查找,如果我要设置50个控件状态怎么办,那不是很慢
我觉得反射可能更好一点
du9232
2006-04-11
打赏
举报
回复
反射性能不好,还不如用foreach
yuesongboy
2006-04-11
打赏
举报
回复
@serversql(啊初)
能不能解释一下呀~~谢谢
加载更多回复(3)
真正的美剧字幕组翻译
高手
教你如何学好英语!心得经验之谈啊!
我们来
看看
美剧字幕组
高手
写的学英语心得,分为听力篇、词汇篇、口语篇,学习英语除了一些很棒的技巧的经验外,三位字幕组高人都提到了坚持…… 听力篇: 考拉小巫,伊甸园论坛字幕组组长,大家经常看的美剧或...
高手
进阶!终极内存技术指南
四、SDRAM的内部基本操作与工作时序 上文我们已经了解了SDRAM所用到的基本信号线路,下面就
看看
它们在SDRAM芯片内部是怎么“布置”的,并从这里开始深入了解内存的基本操作与过程,在这一节中我们将接触到有天书之称...
ACMer
进来
看看
吧
ACM中可以学到的是对程序设计语言的深入理解和应用,同时培养出来的是建模和转化模型的能力,也是
解决
问题
的能力。这些是优秀计算机人应有的基本。 有人说:“如果再来一次大学,我会在大一大二疯狂搞ACM,参加省...
高手
必备!快速优化几千万数据量订单表
为了保证有一个更健康的身体,所以慢慢降低了更新频率,在有了更多休息时间的前提下,思考了一下接下来准备分享的...通篇写的还是挺长的,主要是一开始列出了大纲,但在写的过程中又想起了新的知识点,就一起加
进来
了。
真正的美剧字幕组翻译
高手
教你如何学好英语!心得经验之谈啊有木有
我们来
看看
美剧字幕组
高手
写的学英语心得,分为听力篇、词汇篇、口语篇,学习英语除了一些很棒的技巧的经验外,三位字幕组高人都提到了坚持…… 听力篇: 考拉小巫,伊甸园论坛字幕组组长,大家经常看的...
C#
110,537
社区成员
642,576
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章