C# 编写win窗体程序,怎么实现控件名用变量表示
比如我有20个textbox,分别为textbox1、textbox2、......并将每个textbox的text属性设为“”,
我百度过,说是用Findctrol
但是我的程序中怎么找不到findctrol?
Textbox tb ;
for(i=1;i<=20;i++)
{
string con = "textBox"+i.tostring();
tb=(TextBox)FindCtrol(con); //这句话不对,但是怎么实现呢?
tb.text="";
} --------------------编程问答-------------------- for(i=1;i<=20;i++)
{
Textbox tb =this.Controls( "textBox"+i.tostring()) as TextBox;
tb.text="";
}
web this.FindControl --------------------编程问答--------------------
不行啊,大侠。
报错是:
错误 “System.Windows.Forms.Control.Controls”是“属性”,但此处被当做“方法”来使用
代码是:
for(int i=1;i<=4;i++)
for (int j = 1; j <= 3; j++)
{
switch (j)
{
case 1:
{
str = "x";
break;
}
case 2:
{
str = "y";
break;
}
case 3:
{
str = "z";
break;
}
}
tb = this.Controls("textBox_P" + i.ToString() + str) as TextBox;
if (tb.Text.Length == 0)
tb.Text = n.ToString(); --------------------编程问答--------------------
Controls是属性 后面怎么跟()呢 是this.Controls["textBox"+i.tostring()] as TextBox;
很多复数属性都是集合,通过[]中给索引来取某个对象.
其实便于管理的方法是用泛型集合来管理同一组控件
List<TextBox> list = new List<TextBox>();
TextBox txt1 = new TextBox();
list.Add(txt1);
访问的时候你可以用list[index].Text = "";
或者用foreach 、for 来遍历这个集合访问每个控件.
比如
foreach (TextBox t in list)
{
t.Text = "";
}
希望对你有帮助 --------------------编程问答-------------------- 忘了说了FindCtrol()这个方法是ASP.NET中才有的,跟Controls差不多 只不过后者是属性 前者是方法. --------------------编程问答-------------------- 受教, shadow4222,厉害 --------------------编程问答-------------------- 谢谢楼上诸位
请教shadow4222的方法适用于已经建好的textbox么?
如果开始没有建,而是通过代码建立一批textbox的话,我已经学会了用控件数组的方法
但是控件数组的方法不适用于已经建好的控件 其名变量化 --------------------编程问答-------------------- 可以通过:
Textbox tb =this.Controls( "textBox"+i.tostring()) as TextBox; 实现 --------------------编程问答-------------------- 我也想知道这个怎么解决 --------------------编程问答--------------------
把 “()” 换成 中括号 【】试一试 --------------------编程问答-------------------- 要继承System.Windows.Forms --------------------编程问答-------------------- 看了下
还不错啊
--------------------编程问答-------------------- for (int i = 1; i <=20; i++)
{
TextBox tb=this.Controls["textBox"+i.ToString()] as TextBox;
tb.Text = i.ToString();
}
测试通过! --------------------编程问答-------------------- for (i = 0; i < 15; i++)
{
if (Controls.Find("txtName" + i.ToString(), true).Length > 0)
{
tbName[i] = Controls.Find("txtName" + i.ToString(), true)[0] as TextBox;
}
}
for (i = 0; i < 15; i++)
{
tbName[i].Text = "";
} --------------------编程问答-------------------- 终极答案:SortedList<stirng, System.Windows.Forms.TextBox> textBoies = new ......
textBoies.Add(textBox1.Name, textBox1);
textBoies.Add(textBox2.Name, textBox2);
....
for(i=1;i<=20;i++)
{
string con = "textBox"+i.tostring();
tb=(TextBox)textBoies[con]; //这句话不对,但是怎么实现呢?
tb.text="";
} --------------------编程问答--------------------
--------------------编程问答--------------------
Control.ControlCollection controls = this.Controls;
for (int j = 0; j < controls.Count; j++)
{
if (controls[j].GetType().Name == "TextBox")
{
TextBox txt = controls[j] as TextBox;
txt.Text = "";
}
}
--------------------编程问答--------------------
/// <summary>
/// 给文本框赋空值
/// 调用:ToTextBoxForEmpty(this);
/// </summary>
/// <param name="form">窗体名称</param>
public void ToTextBoxForEmpty(Form form)
{
Control.ControlCollection controls = form.Controls;
for (int j = 0; j < controls.Count; j++)
{
if (controls[j].GetType().Name == "TextBox")
{
TextBox txt = controls[j] as TextBox;
txt.Text = "";
}
}
}
我的怎么测试通不过?
我的textbox是放在不同的Groupbox中的,这个代码需要修改么? --------------------编程问答-------------------- 这么牛逼 --------------------编程问答-------------------- Textbox tb ;
for(i=1;i<=20;i++)
{
string con = "textBox"+i.tostring();
tb.Name = con;
tb=(TextBox)FindCtrol(con);
tb.text="";
} --------------------编程问答-------------------- 16楼的可以! --------------------编程问答-------------------- 16楼的可以满足楼主的要求 --------------------编程问答-------------------- 16楼可以满足lZ要求 --------------------编程问答-------------------- findcontral是ASP.net的方法,在window form程序里没有。
可以用this.Contral这个对象空间索引来取得各个textBox对象 --------------------编程问答-------------------- 标记留痕。 --------------------编程问答-------------------- 我觉得放一个容器中便利一下比较好呀
这是是有规律的 ,如过名字瞎起就不好了吧
比如放在一个panel上
foreach (Control c in panel1.Controls)
{
if (c is Button)
{
c.Text = "";
}
} --------------------编程问答--------------------
这才靠谱。。。我一般foreach this.Controls --------------------编程问答-------------------- (TextBox)FindCtrol(con);
非得要这种实现,只能用反射了。。 --------------------编程问答-------------------- 楼主,这是我写的一个小函数,根据名字 指定控件的
http://blog.csdn.net/wangxianshou/archive/2010/08/24/5835145.aspx --------------------编程问答-------------------- http://blog.csdn.net/wangxianshou/archive/2010/08/24/5835145.aspx --------------------编程问答-------------------- 受教了 --------------------编程问答--------------------
--------------------编程问答-------------------- this.controls.find("TextBox1")(0).Text="abc"
补充:.NET技术 , C#