propertyinfoC#,通过字符串获取控件以及给控件赋值

propertyinfo  时间:2021-06-08  阅读:()

判断某个事件发生为什么用lnetworkevents

btn.Click += new EventHandler(button2_Click); //获取Button类定义的所有事件的信息PropertyInfo pi = (typeof(Button)).GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic); //获取Button对象btn的事件处理程序列表EventHandlerList ehl = (EventHandlerList)pi.GetValue(btn, null);//获取Control类Click事件的字段信息FieldInfo fieldInfo = (typeof(Control)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic); //用获取的Click事件的字段信息,去匹配btn对象的事件处理程序列表,获取btn对象Click事件的委托对象 //事件使用委托定义的,C#中的委托时多播委托,可以绑定多个事件处理程序,当事件发生时,这些事件处理程序被依次执行

什么叫做反射,反射在编程中起什么作用?

反射可以让你动态的给程序增加功能。

比如,原来窗体上有一个文本框,在里面输入一个jpeg的图片文件名时。

程序可以把这个文件转换成bmp格式。

如果要增加读png文件并转换的功能,只需要在写一个dll。

程序就会根据你在文本框中的输入来决定是否调用这个新的dll来处理你的输入。

这个用反射做的话,原来的程序什么都不用动,只需要增加一个dll就可以了。

谁能给我讲一下C# PropertyInfo.GetValue()这个方法 里面的两个参数是什么意思?谢谢

obj 类型:System.Object 将返回其属性值的对象。

index 类型:System.Object() 索引化属性的可选索引值。

对于非索引化属性,此值应为 Nothing。

请问如何使用映射访问和修改运行时类的属性

在程序使用映射之前,需要理解几个基本概念,从运行时如何访问类动态属性开始。

如果没有使用过映射,这可能首先是个奇怪的概念。

你可能很想知道它能完成什么功能。

但是,只要你理解了它的功能并开始使用它,你会发现它不但使用方便,而且在每个应用程序中都有其用武之地。

很多开发人员都尝试使用简单的方法和封装好的程序模块,使用动态可重复利用的模块,可以节约很多时间和精力。

微软为开发人员提供了很好的方法完成这项工作,它是在某种情况下,通过使用PropertyInfo对象完成的。

获得PropertyInfo对象运行时访问数据属性时,必须使用PropertyInfo类。

一个PropertyInfo实例给出类的一个属性。

PropertyInfo对象描述了这种属性,并且在获得或设置属性值时,它成了代理服务器。

获得PropertyInfo对象的两个方法是:System.Type.GetProperty和System.Type.GetProperties。

GetProperty方法返回一个PropertyInfo对象,GetProperties方法返回PropertyInfo对象的数组。

下面是这两种方法基本例子:System.Type.GetPropertyC#:Figure ASystem.Type.GetPropertiesC#:Figure B 使用PropertyInfo对象一旦获得PropertyInfo对象,则可以找出其所涉及的属性信息。

下面列出了PropertyInfo对象中可以被访问的方法和属性属性:CanRead:如果属性包含可访问的GET存储器,则返回真值。

CanWrite:如果属性包含可访问的SET存储器,则返回真值。

Name:返回属性名称。

PropertyType:返回属性接受和返回的类型(Type)。

方法:GetValue:获得属性值(此时CanRead必须为真值)。

Example:Figure CSetValue:设置属性值(此时CanWrit必须为真值)。

Example:Figure DGetCustomAttributes:获得自定义属性数组。

使用上面的方法和属性,能够获得很多需要访问和修改的属性信息。

数据库 实体集和实体型的区别

机房收费系统大家想必不是做完,就是已经在手上了,在一开始做的时候就明确规定,我们必须用实体,而不能使Datatable,因为说是Datatable直接面向了数据库,当时不是很明白,于是也没有再深究,就去实现代码部分了,现在终于把三层的机房收费系统做完了,回过头再看的时候,有了那么一点小认识。

去年的时候,师哥师姐们用的是Datatable,也都实现了三层,在网上查了一些小Dome,也都是datatable ,于是我们就会发现这样真的有意义吗。

那么我们先来看看Datatable和Dataset吧。

在CSDN上,他说的是内存中的一张表,其实我们也可以直接把Datatable认定为数据库中查出来的表,比如你要查学生信息,那么学生信息表在电脑上就是我们说的Datatable。

而Dataset在CSDN中解释为 DataSet 是数据的一种内存驻留表示形式,无论它包含的数据来自什么数据源,都会提供一致的关系编程模型。

DataSet 表示整个数据集,其中包含对数据进行包含、排序和约束的表以及表间的关系。

那么我们把他理解成一个内存中的数据库吧,存放多个表的地方,也就是由多个Datatable的集合,一个小型数据库。

也就是说我们在层与层之间用的如果是Datatable,也就是数据库中的表,但是在我们三层的实现中,我们里边的结构其实只有UI层,BLL层,DAL层,Entity层,并没有要说到的Datatable的地位,知识我们在这样查询的时候方便罢了。

但是这样的话,我们的实体层貌似就没什么用了,尤其是查询的时候,我们的目的是查询东西,然后显示出来,可是如果显示的是Datatable,那么就把实体层架空了。

然后我们再说说实体Entity和List,单个实体如果比喻成一个学生的话,那么List就是好多的学生,但是前提是都是学生。

Entity是一维的,而datatable是二维的,如果大家不明白,那就把实体理解成一条线,而Datatable理解成一张表。

实体本身也就是一些对象的具体属性的集合。

把Datatable中列的属性一次在实体中体现出来。

那么为什么要这么做呢,为什么要把查到的结果再转化一下。

我们做系统的时候当然是往好的方面做,但是我们思考的时候却要往最坏的地方去考虑:这个系统不会一次做好的, 这个系统还是要改,这个系统我需要好多人来帮我,这个系统还不完善,当我们提出来这些“坏”的考虑时,我们就会发现,如果我们返回的是Datatable,要改?怎么改,我看不到Datatable里边的信息啊,完了,还得找数据库。

如果我需要别人帮我,完了,别人也不知道Datatable里边是什么,还得看数据库,如果以后我需要修改怎么办,时间长了呀,都忘了,还得找数据库。

那么大家是不是发现,只要是改动,那么我门需要的就是数据库,把核心数据都暴露了,这怎么可以,所以我们的前辈才发明了实体这么一个东西。

前边已经说过,我们为什么不用Datatable了,即使他在实现的时候是比较简单,但是我们还是要转化,现在我就展示一下他们是如何转化。

如果我们查询的是单条数据,那么就把Datatable转化到实体中。

dStudent为该次转化的实体 <span style="font-size:14px;"><span style="font-size:14px;"> '如果查询道德表的列数不为0,则把需要的查询到的列的数据传给student实体 If table.Rows.Count<> 0 Then dStudent.Student_No = table.Rows(0).Item("Student_No") dStudent.Student_Name =table.Rows(0).Item("Student_Name") dStudent.Sex = table.Rows(0).Item("Sex") dStudent.Department =table.Rows(0).Item("Department") dStudent.Grade =table.Rows(0).Item("Grade") dStudent.StuClass =table.Rows(0).Item("StuClass") dStudent.IsExist =table.Rows(0).Item("IsExist") dStudent.Charge =table.Rows(0).Item("Charge") dStudent.Card_ID =table.Rows(0).Item("Card_ID") End If '返回实体Student Return dStudent </span></span> 这样我们在以后的使用中,无论是修改,还是让别人来看,都是方便的很多。

而List的方法也是非常的方便,知识把Datatable里边的属性遍历了一边,然后在给List(T)中,当然首先添加一个方法,以后直接调用该方法,就成成功的转化。

<span style="font-size:14px;"><span style="font-size:14px;"> Public Shared Function convertToList(Of T As {New})(ByVal dt As DataTable) As IList(Of T) '将datatable转化为泛型集合 '注意:1,convertToList(Of T As {New}) 这里的new是用来约束T的,必须有,不然new T的时候会出现错误 '2,new约束在C#和VB.NET里面的写法是不一样的,C#里面用的是where来为T加上约束的 Dim myList As New List(Of T) '定义最终返回的集合 Dim myTpye As Type = GetType(T) '得到实体类的类型名 Dim dr As DataRow '定义行集 Dim tempName As String = String.Empty '定义一个临时变量 '遍历DataTable的所有数据行 For Each dr In dt.Rows Dim myT As New T '定义一个实体类的对象 Dim propertys() As PropertyInfo =myT.GetType().GetProperties() '定义属性集合 Dim Pr As PropertyInfo '遍历该对象的所有属性 For Each Pr In propertys tempName = Pr.Name '将属性名称赋值给临时变量 '检查DataTable是否包含此列(列名==对象的属性名) If(dt.Columns.Contains(tempName)) Then '将此属性与datatable里的列明比较,查看datatable是否包含此属性 '判断此属性是否有Setter If (Pr.CanWrite = False) Then '判断此属性是否可写,如果不可写,跳出本次循环 Continue For End If Dim value As Object =Trim(dr(tempName).ToString) '定义一个对象型的变量来保存列的值 If (value.ToString()<> DBNull.Value.ToString()) Then '如果非空,则赋给对象的属性 Pr.SetValue(myT, value,Nothing) '在运行期间,通过反射,动态的访问一个对象的属性 End If End If Next myList.Add(myT) '添加到集合 Next Return myList '返回实体集合 End Function</span></span> 实现的时候我们只需要加上一句 <span style="font-size:14px;"><span style="font-size:14px;">myList= EntityHelper.convertToList(Of Entity.CancelCardEntity)(table) Return myList</span></span> 实体,实体集,Datatable三者的比较,用好了,灵活性一定会得到很大的提高,那么以后的学习中,是不是也应该考虑一下,为什么要这么做,不这么做会怎么样。

C#,通过字符串获取控件以及给控件赋值

foreach(Control ctrl in this.Controls) { if(ctrl is Button) { Button btn=ctrl as Button; btn.Text="测试"; } } 窗体有Controls属性。

里面放的是自己所有子控件 当然如果你Button在窗体上的容器里,譬如Panel。

那么先按这个方法去找Panel,然后再找Button 谢谢。

HaloCloud:日本软银vps100M/200M/500M带宽,,¥45.00元/月

halocloud怎么样?halocloud是一个于2019下半年建立的商家,主要提供日本软银VPS,广州移动VDS,株洲联通VDS,广州移动独立服务器,Halo邮局服务,Azure香港1000M带宽月抛机器等。日本软银vps,100M/200M/500M带宽,可看奈飞,香港azure1000M带宽,可以解锁奈飞等流媒体,有需要看奈飞的朋友可以入手!点击进入:halocloud官方网站地址日本vp...

2022年最新PHP短网址生成系统/短链接生成系统/URL缩短器系统源码

全新PHP短网址系统URL缩短器平台,它使您可以轻松地缩短链接,根据受众群体的位置或平台来定位受众,并为缩短的链接提供分析见解。系统使用了Laravel框架编写,前后台双语言使用,可以设置多域名,还可以开设套餐等诸多功能,值得使用。链接: https://pan.baidu.com/s/1ti6XqJ22tp1ULTJw7kYHog?pwd=sarg 提取码: sarg文件解压密码 www.wn7...

提速啦(24元/月)河南BGP云服务器活动 买一年送一年4核 4G 5M

提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...

propertyinfo为你推荐
视频压缩算法视频压缩原理视频压缩算法怎样把3个1G多,1个400多MB的视频文件压缩小?但又无损音质和画面清晰度的。at89s52单片机AT89S52单片机和AT89C51单片机的区别oa办公系统下载OA在哪里下载?seo优化技术SEO技术是什么?模式识别算法研究生研究方向:数据挖掘、模式识别、启发算法这三者哪个有前途模式识别算法机器学习和模式识别有什么区别?看教材,发现它们的算法都差不多一样啊。。。assemblyinfoLOL的 X、L、CS 是什么意思微软操作系统下载微软的系统到哪下载超级播放器推荐个好的视频播放器
网站空间免备案 域名备案号查询 域名抢注工具 x3220 132邮箱 nerd 青果网 本网站在美国维护 有益网络 有奖调查 谁的qq空间最好看 工作站服务器 双十一秒杀 南通服务器 爱奇艺vip免费试用7天 服务器干什么用的 vip购优惠 昆明蜗牛家 metalink idc查询 更多