用变量代替类名调用方法或属性

来源:百度知道 编辑:UC知道 时间:2024/06/23 01:34:26
我以前还问过两个问题,只是问的不够清楚,没得到想要的答案。
比如 我用一个数组把页面当中所有的textbox控件的名字都记录下来
然后 比如string str1="textbox1"
怎样将他强制转换成textbox?
比如 TextBox tb=(TextBox)str1;
然后tb.text.......
如何实现那?

----
第二个问题 我想动态创建TextBox 或者其他的那些控件类 该如何做那?
万分感谢

动态根据ID获取控件使用 FindControl 试试。

TextBox tb= Page.FindControl("textbox1") as TextBox;

如果使用了 MasterPage 上面的Page改成 ContentPlaceHolderID

第一个问题:我认为是不能的,当然可能有其他方法但我不知道。
如果你只是要记录控件的话,你用数组把。比如
TextBox[] TB=new TextBox[10];然后你把所有TextBox都放进这个数组里面就可以了。数组是按引用传递的。

第二个问题:动态创建也很简单,TextBox textbox1=new TextBox();
然后要把这个控件放到一个容器里面,this.Controls.Add(this.btnQuXiao);这个this可以指代的东西很多,可以是一个窗体,页面,panel等,你使用的时候把this换成相应的容器就行了。

建议你建一个WinForm的程序,然后仔细看看.Designer.cs这个文件,它里面就是放的关于一个程序控件是怎么建立的代码。

第一个问题简单的解决办法是遍历查找,或干脆把你记录文字的数组变成记录textbox的
遍历法的代码:
private TextBox GetTxtByName(srtrng name)
{
TextBox re = null;
foreach(Control ctl in this.Controls)
{
if(ctl.GetType() == typeof(TextBox) && ctl.Name = name)
{
re = ctl;
break;
}
}
return re;
}

运行时动态创建已知类型的控件很简单,以下是创建一个文本框,然后放到窗体的20.20位置的代码:
TextBox txt = new TextBox();
txt.Position = new Point(20,20);<