做了20个textbox , 10个分别为 a1,a2....a10,还有10个b1,b2.....b10(控件名)
现在做的是,textbox 鼠标单击显示为 "○"或"△"或"×" ,而实际值为"2"或"1"或"0"。
现在要做的是,我要将a1到a10 的值都相加 到num1 ,b1到b10的值都相加到num2 ,有没有什么直接的方法?也许实现这样的效果用我现在这样的方法并不好,不过因为是初学,既然在做了就决定先把这个方法用好,然后下次再改。
附上代码:
鼠标单击事件:
TextBox temp = (TextBox)sender;
switch(temp.Text){
case "":temp.Text="○";          break;
case "○":temp.Text="△";    
break;
case "△":temp.Text="×";        
break; case "×":temp.Text="○";             
break;
}
将textbox显示的转为 数值函数:
private int typen(string n)  

int reStr = 0; 
switch (n) 

case "○": 
reStr = 2; 
break; 
case "△": 
reStr = 1; 
break; 
case "×": 
reStr= 0; 
break; 
default: 
reStr= 0; 
break; 

return reStr; 

我要做的:int a1=typen(a1.Text);
         ........到  a10=typen(a10.text)
int b1=typen(b1.Text);
         ........到  b10=typen(b10.text)
int num1=a1+a2....+a10;
         int num2=b1+b2....+b10;
         这样写肯定太繁琐,请问该如何解决?
应该还有什么其他解决办法可以处理我所要实现的,或者我上面有走弯路的,还请不吝告之,谢过。。
当然最好先能够解决我现在这个方法所该如何实现。

解决方案 »

  1.   

    尝试用一下控件数组吧,把a类型创建一个控件数组,b类型创建一个控件数组,通过foreach去遍历可以省事不少
      

  2.   

    QQ576006(Ken)请问如何用呢?我是没看过书就直接上手操作的。。 可能问题比较弱智
      

  3.   

    我觉得你写的挺好的,一个新手就是要自己来写些东西,感觉麻烦,遇到困难后解决了才能提高,你可以自己看看foreach,自己创建TextBox[] textBox数组,再看看this.Controls.addrange(textBox)这些用法,你的程序就可以减化很多了,先提醒到这,自己研究吧。
      

  4.   

    public partial class Form1 : Form
    {
    public Form1()
    {
        InitializeComponent();
        this.a1.Click += new EventHandler(TextBox_Click);
        this.a2.Click += new EventHandler(TextBox_Click);
        this.a3.Click += new EventHandler(TextBox_Click);
        this.a4.Click += new EventHandler(TextBox_Click);
        this.a5.Click += new EventHandler(TextBox_Click);
        this.a6.Click += new EventHandler(TextBox_Click);
        this.a7.Click += new EventHandler(TextBox_Click);
        this.a8.Click += new EventHandler(TextBox_Click);
        this.a9.Click += new EventHandler(TextBox_Click);
        this.a10.Click += new EventHandler(TextBox_Click);
        this.b1.Click += new EventHandler(TextBox_Click);
        this.b2.Click += new EventHandler(TextBox_Click);
        this.b3.Click += new EventHandler(TextBox_Click);
        this.b4.Click += new EventHandler(TextBox_Click);
        this.b5.Click += new EventHandler(TextBox_Click);
        this.b6.Click += new EventHandler(TextBox_Click);
        this.b7.Click += new EventHandler(TextBox_Click);
        this.b8.Click += new EventHandler(TextBox_Click);
        this.b9.Click += new EventHandler(TextBox_Click);
        this.b10.Click += new EventHandler(TextBox_Click);
    }private void TextBox_Click(object sender, EventArgs e)
    {
        TextBox temp = (TextBox)sender;
        switch (temp.Text)
        {
            case "": temp.Text = "○"; break;
            case "○": temp.Text = "△";
                break;
            case "△": temp.Text = "×";
                break;
            case "×": temp.Text = "○";
                break;
        }
    }private int typen(string n)
    {
        int reStr = 0;
        switch (n)
        {
            case "○":
                reStr = 2;
                break;
            case "△":
                reStr = 1;
                break;
            case "×":
                reStr = 0;
                break;
            default:
                reStr = 0;
                break;
        }
        return reStr;
    }private void button1_Click(object sender, EventArgs e)
    {
        int num1 = 0, num2 = 0;
        for (int i = 1; i < 10; i++)
        {
            TextBox a = (TextBox)this.Controls.Find("a" + i.ToString(), true)[0];
            if (a != null)
            {
                num1 += typen(a.Text);
            }
            TextBox b = (TextBox)this.Controls.Find("b" + i.ToString(), true)[0];
            if (b != null)
            {
                num1 += typen(b.Text);
            }
        }}
      

  5.   

    问Snowdust(雪尘) ,你的代码里的this.Controls.Find编译时提示"System.Windows.Forms.Control.ControlCollection"并不包含对"Find"的定义。。需要定义先吗?
      

  6.   

    this.Controls.Find是asp.net中才有的,就是說是包含在WEBUI中的,在C#winform中沒有這個函數
      

  7.   

    那 winform 里的话又该如何实现呢?
      

  8.   

    问题解决了。。 用了两小时找资料。。 苦死我了。。 
    谢谢诸位,特别是tjvictor(下一站----星星)最后的代码是:
    int num1 = 0, num2 = 0;
    TextBox []a = new TextBox[]{a1,a2,a3,a4,a5,a6,a7,a8,a9,a10};
    TextBox []b = new TextBox[]{b1,b2,b3,b4,b5,b6,b7,b8,b9,b10};
    foreach(TextBox cc in a){
    if(cc.Text!=null){
    num1+=typen(cc.Text);
    }
    }
             foreach(TextBox cc in b)
    {
             if(cc.Text!=null)
    {
    num2+=typen(cc.Text);
    }
    }

    这里没有用到你说的this.Controls.addrange(textBox),不知道哪里还可以修改及更完善的吗?