类型转换难题,怎样根据控件类型名称转换到对应的控件
在界面上有多种控件,在循环中怎么样根据控件名称来实现类型转换。
foreach(Control ct in this.Controls)
{
怎样根据ct.GetType().Name来实现
uTextBox textbox = (uTextBox) ct;
}
现在是用switch根据来一个一个的转换写法太麻烦了,有没有办法根据控件类型名称利用反射技术进行转换呢?
问题点数:100、回复次数:25Top
1 楼tangyong12(海洋之星)回复于 2005-03-04 08:50:12 得分 5
关注,我也想知道.Top
2 楼jcchou(湘霸佬)回复于 2005-03-04 08:52:48 得分 0
jfTop
3 楼ccat(智拙)回复于 2005-03-04 08:53:13 得分 5
你的心情我理解,不过这个问题,是错的。Top
4 楼zr1982930(皮卡丘)回复于 2005-03-04 08:55:23 得分 0
关注ing!Top
5 楼shine888(fuzhong)回复于 2005-03-04 08:57:41 得分 0
事件都可以动态创建,难道这个类型转换就不能实现吗?Top
6 楼nga96(因为我笨,所以努力。陈勇华)回复于 2005-03-04 09:00:31 得分 0
UPTop
7 楼sutalon(神州无敌)回复于 2005-03-04 09:01:16 得分 0
你的问题问题很有意思,不过是不可能实现的Top
8 楼JasonHeung(拥有一切不过就这样笑着哭)回复于 2005-03-04 09:03:01 得分 0
你从控件数组里获得的就是控件本身,不需要转换。Top
9 楼shine888(fuzhong)回复于 2005-03-04 09:08:31 得分 0
程序员最怕就是做重复的事情,假如我自定义了几十个控件,那么再增加一个控件时就得修改代码,如果代码重用性不好的话那就更惨。
真的就没有办法解决?Top
10 楼donglidanche()回复于 2005-03-04 09:09:43 得分 0
自己写个处理函数吧Top
11 楼amendajing(学习,是个漫长的旅途!)回复于 2005-03-04 09:20:24 得分 0
markTop
12 楼xinminhuibaobao(砖头)回复于 2005-03-04 09:24:40 得分 0
你类型转换的目的是?Top
13 楼xinminhuibaobao(砖头)回复于 2005-03-04 09:26:37 得分 5
foreach(Control ct in this.Controls)
{
Object textbox = (Type(ct)) ct;//这样行么?
}
Top
14 楼xinminhuibaobao(砖头)回复于 2005-03-04 09:28:19 得分 0
upTop
15 楼shine888(fuzhong)回复于 2005-03-04 09:54:14 得分 0
那有没有办法根据控件的属性名称取到当前控件的属性值呢?Top
16 楼zhzuo(秋枫)回复于 2005-03-04 10:04:53 得分 50
http://www.c-sharpcenter.com/CSNET/dynamicinvoke.asp
http://www.c-sharpcorner.com/Code/2002/April/LoadingAssemblyInfo.asp
使用反射生成一个窗体:
private void button1_Click(object sender, System.EventArgs e)
{
Assembly assm = Assembly.LoadFrom("e:\\WindowsApplication5.dll");
Type TypeToLoad= assm.GetType("WindowsApplication5.Form1");
object obj;
obj = Activator.CreateInstance(TypeToLoad);
Form formToShow = null;
formToShow = (Form)obj;
formToShow.Show();
}
Top
17 楼sutalon(神州无敌)回复于 2005-03-04 11:23:13 得分 0
那有没有办法根据控件的属性名称取到当前控件的属性值呢? >--
你的这个问题我不能解决阿Top
18 楼hatita(悠远的风景)回复于 2005-03-04 17:51:20 得分 0
foreach(Control ct in this.Controls)
{
if(ct is uTextBox)
uTextBox textbox = (uTextBox) ct;
}
Top
19 楼ccat(智拙)回复于 2005-03-04 17:53:40 得分 0
那有没有办法根据控件的属性名称取到当前控件的属性值呢?
这个简单,可以通过反射得到,推荐你读一下《Microsoft .NET 框架程序设计》Top
20 楼pgfun(木)回复于 2005-03-05 01:03:52 得分 0
ccat(智拙) :你的心情我理解,不过这个问题,是错的。
--------
赫赫,没错,这个问题确实是错的。
Top
21 楼wjcking()回复于 2005-03-05 11:45:44 得分 0
foreach(Control ct in this.Controls)
{
if(ct is uTextBox)
uTextBox textbox = (uTextBox) ct;
}Top
22 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2005-03-05 12:07:22 得分 0
是可以通过反射来得到,但这样做是错误的。。。。Top
23 楼shine888(fuzhong)回复于 2005-03-05 14:29:51 得分 0
sControl.GetType().GetProperty("ColumnName").GetValue() 方法怎么取不到属性值啊,老是说错,但看帮助文档GetValue方法是用来取属性值的啊?
Top
24 楼sutalon(神州无敌)回复于 2005-03-05 15:51:08 得分 35
shine888(fuzhong),对你的问题:
sControl.GetType().GetProperty("ColumnName").GetValue() 方法怎么取不到属性值啊,老是说错,但看帮助文档GetValue方法是用来取属性值的啊?〉---
是因为你的GetValue() 方法写的有问题,此方法中的参数你没有写,你可以参考一下我写的一个测试
程序,经测试是对的,如:
static void Main(string[] args) //测试程序
{
AB ab= new AB("sjh");
//打引出的结果为“sjh”,测试正确
Console.WriteLine(ab.GetType().GetProperty("Name").GetValue(ab,null));
Console.Read();
}
class AB
{
string name;
public string Name
{
set{this.name = value;}
get{return this.name;}
}
public AB(string name)
{
this.name = name;
}
}
Top
25 楼cym40011(萧雨)回复于 2005-03-05 16:24:03 得分 0
可以,我就写过这样的代码
如下:是Web 即*.aspx.cs 文件
//this.Controls[1].Controls 你调试一下就可以看到TextBox控件了
foreach(Control ct in this.Controls[1].Controls)
{
TextBox objtextbox = (TextBox) ct;
if(objtextbox.FullName=="System.Web.UI.WebControls.Text"
{
//你的处理函数
}
}
Top




