请教怎样利用反射获得excel2013窗体控件的控件的相应属性值

正文 c#反射调用类型成员的例子
c#反射调用类型成员的例子
发布时间: & 编辑:
分享一个c#使用反射调用类型成员的例子,反射可以对我们编程提供极大的便利(动态的获取信息、调用类型成员、创建实例等等),通过本例以加深理解。
classProgram
staticvoidMain(string[]args)
Typetype=typeof(Employee);
//使用无参构造函数动态创建对象
varobjNull=type.InvokeMember(null,BindingFlags.CreateInstance,null,null,null);
//调用两个使用了两个string参数的构造函数动态创建对象
varfrankJob=type.InvokeMember(null,BindingFlags.CreateInstance,null,null,newobject[]{&job&,&frank&});
//调用公有成员属性get方法
varfileName=type.InvokeMember(&FirstName&,BindingFlags.GetProperty,null,frankJob,null);
//调用公有成员属性set方法
type.InvokeMember(&Email&,BindingFlags.SetProperty,null,frankJob,newobject[]{&&});
//动态调用无参数方法
varobjStr=type.InvokeMember(&ToString&,BindingFlags.InvokeMethod|BindingFlags.Public|BindingFlags.Instance|BindingFlags.Static,null,frankJob,null);
//动态调用带参数的方法
varemail=type.InvokeMember(&GetEmail&,BindingFlags.InvokeMethod,null,frankJob,newobject[]{&sunshine&});
publicclassEmployee
publicintId{}
publicstringFirstName{}
publicstringLastName{}
publicstringAddress{}
publicstringEmail{}
publicEmployee(){}
publicEmployee(stringfirstName,stringlastName)
FirstName=firstN
LastName=lastN
publicoverridestringToString()
returnstring.Format(&{0}{1}&,LastName,FirstName);
publicstringGetEmail(stringuser)
returnstring.Format(&{0}@&,user);
}您可能感兴趣的文章:打造高端培训课程,传播精品教育理念!
神州教育 神州培训 教育 企业培训 企业内训 企业管理 研修课程 简章 资本运作 房地产 国学 名师推荐
随笔 - 87, 文章 - 21, 评论 - 117, 引用 - 0
public class MyClass
public int Property1 { }
static void Main()
MyClass tmp_Class = new MyClass();
tmp_Class.Property1 = 2;
Type type = tmp_Class.GetType();
//获取类型
System.Reflection.PropertyInfo propertyInfo = type.GetProperty("Property1");
//获取指定名称的属性
int value_Old = (int)propertyInfo.GetValue(tmp_Class, null); //获取属性值
Console.WriteLine(value_Old);
propertyInfo.SetValue(tmp_Class, 5, null);
//给对应属性赋值
int value_New = (int)propertyInfo.GetValue(tmp_Class, null);
Console.WriteLine(value_New);
其它应用请参考:/pdb/dotnet/760.html
打造高端培训课程,传播精品教育理念!
神州教育 神州培训 教育 企业培训 企业内训 企业管理 研修课程 简章 资本运作 房地产 国学 名师推荐查看: 10001|回复: 6
Vba遍历控件,获取控件属性值
阅读权限30
在线时间 小时
Excel中,视图——工具栏——控件工具箱,选择“命令按钮”,或其他控件的——Shackwave Flash Object,在excel中能画出控件。点击右键——属性,能看到这些控件的属性值。假如这些控件种类、数量有很多,有命令按钮、复选框按钮、选项按钮、单选、ShockwaveFlash控件,可能还有不知道名字的。我的要求,使用程序,如何遍历控件,遍历控件,遍历控件,获得这些控件的属性值?请各位大侠帮忙,帮我做下,谢谢。部分属性见附件:
13:05 上传
点击文件名下载附件
10.34 KB, 下载次数: 148
阅读权限95
在线时间 小时
如何枚舉控件屬性???
阅读权限30
在线时间 小时
mineshine 发表于
如何枚舉控件屬性???
http://club.excelhome.net/thread--1.html
大侠,你好,我仔细看了,这个是窗体的,Sheet1工作表的没有。
阅读权限30
在线时间 小时
得到部分属性Sub a()
For Each sht In ActiveWorkbook.Sheets
& & For Each obj In sht.OLEObjects
& && &&&If obj.Name Like &ShockwaveFlash*& Then
& && && &&&Cells(i + 1, 1) = obj.Object.Movie
& && && &&&i = i + 1
& && &&&End If
& & Next
Next sht
End Sub复制代码值
阅读权限30
在线时间 小时
窗体的,学习别人的Sub EnumUserForms5()
& & On Error Resume Next
& & Dim i As Long, j As Long, n As Long
& & Cells(1, 1) = &控件&
& & Cells(1, 2) = &属性,方法,事件&
& & Cells(1, 3) = &值&
& && &&&With ThisWorkbook.VBProject.VBComponents
& && &&&For i = 1 To .Count
& && && && &If .Item(i).Type = 3 Then
& && && && && & For j = 1 To ThisWorkbook.VBProject.VBComponents(i).Properties.Count
& && && && && & n = n + 1
& && && && && && &&&Cells(n + 1, 1) = ThisWorkbook.VBProject.VBComponents(i).Name
& && && && && && &&&Cells(n + 1, 2) = ThisWorkbook.VBProject.VBComponents(i).Properties(j).Name
& && && && && && &&&Cells(n + 1, 3) = ThisWorkbook.VBProject.VBComponents(i).Properties(j)
& && && && && & Next j
& && && && &End If
& && &&&Next
& & End With
End Sub
'用户需要进入“信任中心”→“宏设置”,勾选“信任对VBA工程对象模型的访问”
'2003用户进入“工具”→“宏”→“安全性”→“可靠发行商”,勾选“信任对“Visual Basic
'项目”的访问”
Sub 获取窗体的属性列表()&&'代码通用于Excel 和2010
On Error Resume Next
Dim i As Long, j As Long, 数量 As Long, arr() As String
With ThisWorkbook.VBProject.VBComponents
&&For i = 1 To .Count& &&&'遍历工程中所有部件
& & If .Item(i).Type = 3 Then&&'如果其类型是窗体(值为1表示模块,2表示类模块)
& && &&&'遍历窗体的所有属性
& && &For j = 1 To ThisWorkbook.VBProject.VBComponents(i).Properties.Count
& && &&&数量 = 数量 + 1 '累加计数器,该变量代表窗体属性的个数
& && &&&ReDim Preserve arr(1 To 3, 1 To 数量)&&'重新声明数组的维数
& && &&&With ThisWorkbook.VBProject.VBComponents(i)
& && && & arr(1, 数量) = .Name&&'对数组第一行赋值为窗体名
& && && & arr(2, 数量) = .Properties(j).Name&&'对数组第一行赋值为属性名
& && && & arr(3, 数量) = .Properties(j)& & '对数组第一行赋值为属性值
& && &&&End With
& && &Next j
& & End If
&&Next
End With
If 数量 & 0 Then '如果找到目标值
&&[a1:c1] = Array(&控件&, &属性&, &值&)& & '写入标题
&&[a2].Resize(数量, 3) = WorksheetFunction.Transpose(arr)
&&'将数组的值导入工作表
&&Columns(&a:c&).AutoFit&&'AC列自动适应列宽
&&Columns(&a:c&).HorizontalAlignment = xlLeft&&'左对齐
End If
End Sub复制代码
阅读权限30
在线时间 小时
'引用TypeLib Information
Sub listcontrols()
& & Cells(1, 1) = &控件&
& & Cells(1, 2) = &属性,方法,事件&
& & Cells(1, 3) = &值&
& & [a1:c1].Interior.ColorIndex = 3
& & On Error Resume Next
& & Dim ctl As Object, n As Long
& && &&&n = 1
& && &&&For Each ctl In Sheet1.OLEObjects
& && &&&Dim iInf As InterfaceInfo
& && &&&Set iInf = InterfaceInfoFromObject(ctl)
& && &&&If Not (iInf Is Nothing) Then
& && &&&Dim mem As MemberInfo
& && &&&For Each mem In iInf.Members
& && &&&If mem.InvokeKind And INVOKE_PROPERTYGET Then
& && && && &n = n + 1
& && && && &Cells(n, 1) = ctl.Name
& && && && &Cells(n, 2) = mem.Name
& && && && &Cells(n, 3) = CallByName(ctl, mem.Name, VbGet)
& && &&&End If
& && &&&Next
& && &&&End If
& && &&&Next
& & [a1:c65536].Columns.AutoFit
End Sub复制代码又学到一种方法。
阅读权限50
在线时间 小时
谢谢& && &&&分享
最新热点 /1
ExcelHome每周都有线上直播公开课,
国内一流讲师真身分享,高手贴身答疑,
赶不上直播还能看录像,
关键居然是免费的!
厚木哥们都已经这么努力了,
你还好意思说学不好Office。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师C#通过反射打开相应窗体方法 - _ali - 博客园
随笔 - 70, 文章 - 0, 评论 - 3, 引用 - 0
C#单击菜单栏或工具栏时通过反射打开窗体的方法,可以以取代长长的if-else或switch-case语句。要点:将菜单或工具栏项的名称设置为与相应窗体名称相同(关键)。
private void MenuItem_Click(object sender, EventArgs e)
ToolStripMenuItem menuItem = (ToolStripMenuItem)
Form form = (Form)Assembly.Load(“您的程序集名称”).CreateInstance(“窗体命名空间. “+ menuItem.Name); //注意: 窗体命
名空间后面一定要加一个点
form.MdiParent = this; //如果是Mdi窗体的话请加这一行
form.Show();
如果我们的一个窗体里有N个窗体,或者是有一Tree需要对应的调用N个窗体话,如果使用IF ELse方法可能会很麻烦,一般可能我会们这样写&
private void button3_Click(object sender, EventArgs e)
//获取单击的Button名称
string btnname = ((Button)sender).N
if (btnname == "button1")
//处理窗体
else if (btnname == "button2")
//处理窗体
//处理窗体
这样也不是不可 行,但是如果100多个上千个就不行了,&可以说超过10个就不好玩了,但是如果使用反射就很方便 ,只需要几行代码就可以的,&看下面的方法吧
/// &summary&
/// 打开新的子窗体
/// &/summary&
/// &param name="strName"&窗体的类名&/param&
/// &param name="AssemblyName"&窗体所在类库的名称&/param&
public static void CreateForm(string strName, string AssemblyName)
string path = AssemblyN//项目的Assembly选项名称
string name = strN //类的名字
Form doc = (Form)Assembly.Load(path).CreateInstance(name);
doc.Show();
private void button1_Click(object sender, EventArgs e)
//获取单击的Button名称
string btnname = ((Button)sender).T
CreateForm("WindowsFormsApplication1." + btnname, "WindowsFormsApplication1");
有了上面的方法,只要我们的用户控件Text和窗体的类名一样就可能实现动态加载了,当然如果有的同志说我的Text要用汉字怎么办,那就再换个属性啊,比如Name或者是其他属性都可以。总之肯定比你一个一个的去写要方便很多VB复习题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩33页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 excel2013窗体控件 的文章

 

随机推荐