CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VB.NET

[水如烟.交流]按控件实例名称及其属性名称实现动态赋值

楼主HanMo(翰墨)2004-08-01 01:21:33 在 .NET技术 / VB.NET 提问

这是学反射的一点成绩,这个问题问的人不少,供大家参考。  
  后面可能对它的功能进行一些补充,  
  有兴趣的可以到我的Blog上看看,大家也不妨提供些好意见。  
  http://blog.csdn.net/lzmtw/archive/2004/08/01/57638.aspx  
   
          '按控件实例名称及其属性名称实现动态赋值  
          '入口参数:ClassInstance     控件所在的类实例  
          '                   ControlName   控件实例名称,区分大小写  
          '                   PropertyName   要设值的控件属性名称,区分大小写(其实这里可以不必区分大小写的,只是为了养成习惯,我这样要求自己的)  
          '                   Value   新值,类型是一个Object,这倒是要注意的  
          '出口参数:   True则重设成功,False不成功  
          '需要   Imports   System.Reflection和Imports   System.ComponentModel  
          Public   Function   SetValueControlProperty(ByVal   ClassInstance   As   Object,   ByVal   ControlName   As   String,   ByVal   PropertyName   As   String,   ByVal   Value   As   Object)   As   Boolean  
                  Dim   Result   As   Boolean   =   False   '返回值。虽然默认是Flase,但我还是喜欢这样设它,主要是看着明了  
                  '下面我不注释了  
                  Dim   myType   As   Type   =   ClassInstance.GetType  
                  Dim   myFieldInfo   As   FieldInfo   =   myType.GetField("_"   &   ControlName,   BindingFlags.NonPublic   Or   _  
                                                                            BindingFlags.Instance   Or   BindingFlags.Public)   '加"_"这个是特要紧的  
   
                  If   Not   myFieldInfo   Is   Nothing   Then  
                          Dim   properties   As   PropertyDescriptorCollection   =   TypeDescriptor.GetProperties(myType)  
                          Dim   myProperty   As   PropertyDescriptor   =   properties.Find(PropertyName,   False)     '这里设为True就不用区分大小写了  
   
                          If   Not   myProperty   Is   Nothing   Then  
                                  Dim   ctr   As   Object  
                                  ctr   =   myFieldInfo.GetValue(ClassInstance)   '取得控件实例  
                                  Try  
                                          myProperty.SetValue(ctr,   Value)  
                                          Result   =   True  
                                  Catch   ex   As   Exception  
                                          MsgBox(ex.Message)  
                                  End   Try  
                          End   If  
                  End   If  
   
                  Return   Result  
          End   Function  
   
          '测试  
          Private   Sub   Test()  
                  SetValueControlProperty(Me,   "Button1",   "Text",   "Hello")  
                  SetValueControlProperty(Me,   "Button2",   "Visible",   False)  
                  Dim   frm   As   New   Form2  
                  SetValueControlProperty(frm,   "MyTextBox",   "Text",   "应该还行吧?")  
                  frm.Show()  
          End   Sub  
   
   
  问题点数:100、回复次数:34Top

1 楼lzmtw(水如烟)回复于 2004-08-01 01:32:45 得分 0

好了,回家睡觉觉了  
  各位晚安Top

2 楼AntingZ(夕惕若)回复于 2004-08-01 01:54:44 得分 8

这么早就睡觉Top

3 楼lzmtw(水如烟)回复于 2004-08-01 09:28:13 得分 0

是不是CSDN服务器有问题  
  [我参与问题][我得分问题]都打不开,弄到CSDN文档里头的也不能链接上去。Top

4 楼lzmtw(水如烟)回复于 2004-08-01 14:08:46 得分 0

怎么没有应哪,是不是没有多大用处?  
  (7777)Top

5 楼lwbmail(努力工作...)回复于 2004-08-01 14:20:16 得分 4

我来了!好帖,等下我再看  
   
    lzmtw(水如烟)谢谢了!  
  Top

6 楼lwbmail(努力工作...)回复于 2004-08-01 14:21:45 得分 8

好像近段时间来的人少了许多  
   
   
  顶!Top

7 楼AKillGodKillBuddha(神挡杀神 佛挡杀佛)回复于 2004-08-01 14:22:06 得分 8

楼主   帮了我的大忙了Top

8 楼lzmtw(水如烟)回复于 2004-08-01 14:23:08 得分 0

呵,也好,反正也忙着Top

9 楼lzmtw(水如烟)回复于 2004-08-01 14:25:31 得分 0

哈,终于有人说好了,我可是昨晚弄到一点才基本明白的  
  原来做出来的好复杂Top

10 楼lzmtw(水如烟)回复于 2004-08-01 15:02:43 得分 0

我点[参与问题]时,总是不正常,不知怎么回事:  
   
  Microsoft   OLE   DB   Provider   for   SQL   Server   错误   '80004005'    
   
  Warning:   Fatal   error   823   occurred   at   Aug   1   2004   3:01PM    
   
  /Expert/member/MyForum.asp,行   167    
  Top

11 楼AntingZ(夕惕若)回复于 2004-08-01 16:14:44 得分 8

很正常啊  
   
  可能是你的电脑有问题,重装一下系统就好了!   ^_^Top

12 楼lzmtw(水如烟)回复于 2004-08-01 16:31:04 得分 0

呵,你别吓我Top

13 楼lzmtw(水如烟)回复于 2004-08-01 16:36:10 得分 0

呵,这个帐号是正常的Top

14 楼lzmtw(水如烟)回复于 2004-08-01 16:38:06 得分 0

呵,刚才我是用HanMo   (翰墨)   这个帐号,它好正常  
  可lzmtw(水如烟)   就是不行了  
  你说是哪的问题Top

15 楼lzmtw(水如烟)回复于 2004-08-02 00:25:48 得分 0

睡觉。Top

16 楼Ztony(www)回复于 2004-08-02 09:34:04 得分 8

TO:水如烟:  
   
            你的动态赋值,对于动态生成的控件没有作用。  
  无法赋值。。。。。。  
        我用的是给继承过来的动态   生成的控件赋值,。。。Top

17 楼wing0(d-link)回复于 2004-08-02 09:45:57 得分 8

markTop

18 楼yanwc()回复于 2004-08-02 13:47:19 得分 8

markTop

19 楼lzmtw(水如烟)回复于 2004-08-02 21:11:22 得分 0

哈,果是服务器上的事  
  现在就正常了Top

20 楼wdwd05(学.NET,从头开始)回复于 2004-08-02 23:03:52 得分 8

晕,我怎么测试什么也不显示~搞什么~Top

21 楼lzmtw(水如烟)回复于 2004-08-04 18:26:13 得分 0

现在升级一个收费系统,从FOX到NET的,数据库不能换,得要用原来的DBase,计算过程要取它一个表中的定义过程。为核数和调试方便,弄了一个简易的计算器。代码贴在BLOG上,初学的应该有所启发。  
         
  用CodeDom、Reflection做一个简易计算器    
  http://blog.csdn.net/lzmtw/archive/2004/08/04/64028.aspx  
  Top

22 楼lzmtw(水如烟)回复于 2004-08-08 00:29:33 得分 0

哎,原来中国队一打球,我肯定去看的  
  这七八年,我都没去看了  
  几小时前,还是忍不住看了  
  最后老婆说,你看,都说你不要看了......Top

23 楼ilovedonny(迷失的代码工)回复于 2004-08-08 23:38:09 得分 8

TO:   lzmtw(水如烟)  
  能留下你的MSN吗?  
  有问题请教。Top

24 楼lzmtw(水如烟)回复于 2004-08-09 01:38:41 得分 0

真不好意思,我不大用QQ、MSNTop

25 楼lzmtw(水如烟)回复于 2004-08-09 02:54:20 得分 0

睡觉,要不早上又上不了班了  
  各位好睡Top

26 楼ilovedonny(迷失的代码工)回复于 2004-08-13 03:42:36 得分 8

哦,那邮箱能留一个吗?Top

27 楼lzmtw(水如烟)回复于 2004-08-13 08:36:07 得分 0

LzmTW@21CN.com  
  不过你发了邮件还得用CSDN的消息说一声Top

28 楼lzmtw(水如烟)回复于 2004-08-13 08:37:09 得分 0

不要问概念之类的,我对概念一知半解Top

29 楼Lmovie()回复于 2004-08-13 09:14:54 得分 8

留着以后用!呵呵!!:)Top

30 楼lzmtw(水如烟)回复于 2004-08-13 20:28:55 得分 0

回家了。今晚凌晨看开幕式。  
  祝各位节日快乐,今天是人类的共同节日(书上说的)。Top

31 楼sky9531(玩得晚,睡得晚)回复于 2004-08-13 23:10:28 得分 8

正在等待中...Top

32 楼lzmtw(水如烟)回复于 2004-08-15 04:24:37 得分 0

田亮杨景辉入金Top

33 楼lzmtw(水如烟)回复于 2004-08-15 04:30:39 得分 0

女排三比一拿下了小美(输了就自然变得小了些)Top

34 楼lzmtw(水如烟)回复于 2004-08-15 18:26:58 得分 0

To   Ztony(www):  
  动态的要加上     Or   BindingFlags.InstanceTop

相关问题

  • MSChart 控件如何使用? LegendText属性如何赋值 ?
  • 关于如何给多个控件属性赋值问题
  • 控件数组如何用循环给Value属性赋值
  • 用户控件的属性赋值问题?急!急!急!
  • PrintDBGridEh控件如何动态对BeforeGridText属性赋值??
  • 直接和控件的属性赋值是怎么改变其属性的
  • 如何对动态生成的控件的属性进行赋值操作
  • DataGrid控件给FirstRow属性赋值为什么不能大于2?
  • 用GetNextControl给控件属性赋值的问题.大虾帮我呀.
  • 如何把控件的Font属性存到数据库中,以后又从数据库中将其读取,并赋值给控件的Font属性?

关键词

  • .net
  • 控件
  • 属性
  • csdn
  • 赋值
  • 实例
  • lzmtw
  • 名称
  • myfieldinfo
  • setvaluecontrolproperty

得分解答快速导航

  • 帖主:HanMo
  • AntingZ
  • lwbmail
  • lwbmail
  • AKillGodKillBuddha
  • AntingZ
  • Ztony
  • wing0
  • yanwc
  • wdwd05
  • ilovedonny
  • ilovedonny
  • Lmovie
  • sky9531

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo