当前位置:编程学习 > C#/ASP.NET >>

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 --------------------编程问答--------------------
引用 1 楼 wuyq11 的回复:
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(); --------------------编程问答--------------------
引用 1 楼 wuyq11 的回复:
for(i=1;i<=20;i++)
 {
  Textbox tb =this.Controls( "textBox"+i.tostring()) as TextBox;  
  tb.text="";
 }
web this.FindControl


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;  实现 --------------------编程问答-------------------- 我也想知道这个怎么解决 --------------------编程问答--------------------
引用 2 楼 bluecons 的回复:
引用 1 楼 wuyq11 的回复:

for(i=1;i<=20;i++)
{
Textbox tb =this.Controls( "textBox"+i.tostring()) as TextBox;
tb.text="";
}
web this.FindControl



不行啊,大侠。
报错是:
错误 “System.Windows.Forms.Contro……



把 “()” 换成 中括号 【】试一试 --------------------编程问答-------------------- 要继承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 = "";
                }
            }
        }
--------------------编程问答--------------------
引用 12 楼 jdz 的回复:
for (int i = 1; i <=20; i++)
{
   TextBox tb=this.Controls["textBox"+i.ToString()] as TextBox;
   tb.Text = i.ToString();
}
测试通过!

我的怎么测试通不过?
我的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 = "";
                }
            } --------------------编程问答--------------------
引用 15 楼 a13062331830 的回复:
C# code

Control.ControlCollection controls =  this.Controls;
               for (int j = 0; j < controls.Count; j++)
               {
                   if (controls[j].GetType().Name == "TextBo……

这才靠谱。。。我一般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 --------------------编程问答-------------------- 受教了 --------------------编程问答--------------------
引用 1 楼 wuyq11 的回复:
for(i=1;i<=20;i++)
 {
  Textbox tb =this.Controls( "textBox"+i.tostring()) as TextBox;  
  tb.text="";
 }
web this.FindControl

--------------------编程问答-------------------- this.controls.find("TextBox1")(0).Text="abc"
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,