反射应用之一:根据控件名、属性名进行取值和赋值

控件

'必须引用命名空间System.Reflection,System.ComponentModel

'以下根据控件名和属性名取值

Public Function GetValueControlProperty(ByVal ClassInstance As Object, ByVal ControlName As String, ByVal PropertyName As String) As Object

Dim Result As Object

Dim myType As Type = ClassInstance.GetType

Dim myFieldInfo As FieldInfo = myType.GetField("_" & ControlName, BindingFlags.NonPublic Or _

BindingFlags.Instance Or BindingFlags.Public Or BindingFlags.Instance)

If Not myFieldInfo Is Nothing Then

Dim properties As PropertyDescriptorCollection = TypeDescriptor.GetProperties(myType)

Dim myProperty As PropertyDescriptor = properties.Find(PropertyName, False)

If Not myProperty Is Nothing Then

Dim ctr As Object

ctr = myFieldInfo.GetValue(ClassInstance)

Try

Result = myProperty.GetValue(ctr)

Catch ex As Exception

MsgBox(ex.Message)

End Try

End If

End If

Return Result

End Function

'以下根据控件名和属性名赋值

Public Function SetValueControlProperty(ByVal ClassInstance As Object, ByVal ControlName As String, ByVal PropertyName As String, ByVal Value As Object) As Object

Dim Result As Object

Dim myType As Type = ClassInstance.GetType

Dim myFieldInfo As FieldInfo = myType.GetField("_" & ControlName, BindingFlags.NonPublic _

Or BindingFlags.Instance Or BindingFlags.Public Or BindingFlags.Instance) '加"_"这个是特要紧的

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 = ctr

Catch ex As Exception

MsgBox(ex.Message)

End Try

End If

End If

Return Result

End Function

'调用

'以下实现Label1.Text=TextBox1.Text,Label2.Text=TextBox2

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim i As Integer

For i = 1 To 2

Me.SetValueControlProperty(Me, "Label" & i.ToString, "Text", GetValueControlProperty(Me, "TextBox" & i.ToString, "Text"))

Next i

End Sub

时间: 2024-11-02 14:47:28

反射应用之一:根据控件名、属性名进行取值和赋值的相关文章

asp.net如何在运行时,根据控件的属性名动态的添加控件的属性?

问题描述 问题描述:要实现的功能很简单,就是根据checkboxlist中选择的值,设置label的一些属性.但是我想不用硬编码Label1.Font.Bold这种方式,而是根据item的value动态设置.代码如下:foreach(ListItemiteminCheckBoxList1.Items){if(item.Selected==true){//item.Value的值为Bold.通过item.Value可以得知我是想设置Label1.Font的Bold为true.Label1.Font

ASP.NET服务器端控件RadioButtonList,DropDownList,CheckBoxList的取值、赋值用法_实用技巧

这三个控件都有一个Items集合,可以用 RepeatLayout 和 RepeatDirection 属性来控制列表的呈现形式.如果 RepeatLayout 的值为 Table,那么将在表中呈现列表.如果设置成 Flow,那么将在没有任何表结构的情况下呈现列表.默认情况下,RepeatDirection 的值为 Vertical.将此属性设置成 Horizontal 将会使列表水平呈现. RadioButtonList:控件提供已选中一个选项的单项选择列表(数据源单选).与其他列表控件相似,

使用接口来统一控件的取值、赋值和初始化

        这里说的控件主要指的是文本框.下拉列表框这一类的控件,用户使用这些控件输入数据,然后我们需要提取这些数据进行处理.但是不同的控件有不同的取值方式,比如文本框要用Text,下拉列表框是SelectedValue (当然还有其他的方法),CheckBoxList也是SelectedValue,但是这个只能获取第一个选项,如果是选择了多个选项,他只能返回第一个被选中的选项.可能您觉得这个没什么的呀,很正常呀.         是呀,只不过我比较懒,尤其在写表单控件的时候,如何取值就是一

如何通过C#的反射机制,通过控件名获取控件(并且这个控件本身是动态生成的)

问题描述 我知道可以通过下面这种方式通过控件名获取控件TextBoxtextbox=(TextBox)this.GetType().GetField("Textbox的名称",System.Reflection.BindingFlags.NonPublic|System.Reflection.BindingFlags.Instance|System.Reflection.BindingFlags.IgnoreCase).GetValue(this);但是,如果这个控件是自己用代码生成的

如何给用户控件定义属性(C#:ASP.NET)

asp.net|控件 前言 ASP.NET的用户控件功能很强大,在web窗体里面调用相信大家都会,如果要给用户控件定义属性,那该怎么做呢?只要你看完这篇文章保你会给自己的控件上弄上几个属性.本篇文章不太适合初学.NET的朋友,涉及到一些面向对象的知识,如果您不了解这些知识,请参阅相关书籍 在这里下载电子图书(http://www.cs-aspx.net/down.aspx) 程序namespace DotNet{ using System; using System.Data; using Sy

网页中通过param name方式给ActiveX控件的属性赋值示例

通过param name方式给ActiveX控件的属性赋值的想法还是不错的感兴趣的朋友可以看下具体的实现,希望对大家有所帮助     复制代码 代码如下: <HTML> <HEAD> <TITLE>Test ActiveX</TITLE> <OBJECT ID="TestCtrl" NAME="<span style="font-family:Arial,Helvetica,sans-serif"

在asp.net中为Web用户控件添加属性和事件

asp.net|web|控件 在asp.net中为Web用户控件添加属性和事件 在90年代初,Microsoft为Web程序员提供的 Active Server Pages(ASP)革命性地改变了Web的编程.它可以利用十分易用的模型在Web服务器上动态生成HTML,并且很容易的实现了对数据库的访问,就当时来说,这是一项多么吸引人的技术,包括现在Internet上的许多web站点都是用Asp写的,我的同事前辈们更是玩Asp的高手,经历这么多年而不衰,可见他的成功. 但是,技术是在不断的发展着,引

ASP.NET自定义控件组件开发 第六章 深入讲解控件的属性

深入讲解控件的属性持久化(一) 自从写了控件开发的文章后,收到了不少朋友的来信,提出了不少的问题,感谢大家的关注.今天就 把大家说的一些问题来讲解下. 虽然我这个系列是控件开发,但是我的目的还是希望大家通过开发控件更加快速的对ASP.NET有更加深 入的了解,所以我们也很有必要把一些基础性的东西将清楚. 为了达到深入讲解属性的目的,我首先来讲讲页面周期和页面解析的一些问题: 1.页面的解析: 大家可能听说,页面在提交给服务器的时候,都是被解析成为了一个个的继承与Page的类,最直接的 证明就是:

扩展Visual Editor的控件和属性

扩展 Visual Editor 的控件和属性 Visual Editor for Java 是基于 eclipse 的 GUI 可视化编辑插件,该插件以 Java 代码为中心,实现了所见即所得的用户界面编辑方式,广泛支持目前的 SWT.AWT.Swing 等控件包.本文通过一个完整的对 Visual Editor 的扩展示例,向读者展示扩展 Visual Editor 的控件和属性的方法. 背景 Visual Editor for Java 实现了基于 Java 源代码的所见即所得的用户界面开

不知道怎么了,控件没属性了

问题描述 用ASP.NET做管理系统,运行了一次后,控件点属性都是一片空白但是代码都在,再运行的话还可以,就是点控件没属性``请高手指点 解决方案 解决方案二:你重新告以下啊 我们私下里交流啊解决方案三:是否在设计页或者重启一下解决方案四:重启一下试试解决方案五:你的.net在运行的时候;属性是不可以改的.解决方案六:也许你在运行,所以属性不能改,也许那个环境出问题了,你把VS.net关了重新打开一下.应该就可以了~解决方案七:估计是vs2005的问题