结合循环

时间:2016-09-06 05:23:48

标签: c#

我正在做一个有多个按钮和文本框的程序。我现在创建的程序甚至不完整50%,但代码行超过5000,使程序太大。有没有办法将这些组合用于循环语句:

单击第一个文本框时。

var btn = new[] { btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn10, btn11, btn12, btn13, btn14 };
for (int i = 0; i < 14; i++)
{
    if (txt1.Text == btn[i].Text)
    {
        txt1.Text = "";
        btn[i].Visible = true;
        break;
    }
}

单击第二个文本框时。

var btn = new[] { btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn10, btn11, btn12, btn13, btn14 };
for (int i = 0; i < 14; i++)
{
   if (txt2.Text == btn[i].Text)
   {
      txt2.Text = "";
      btn[i].Visible = true;
      break;
   }
}

以及更多文本框。

3 个答案:

答案 0 :(得分:4)

仔细研究你正在使用的代码,基于TextBox改变的东西是TextBox本身,这样你就可以接受它作为函数的参数并将其余的语句包装在函数中。然后它将检查条件并更改按钮的可见性。这可能如下所示:

 var arrayButtons = new Button[] { btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn10, btn11, btn12, btn13, btn14 };
 // Let the array be Global, so that we can avoid defining the same every call
 public void ChangeButtonVisibility(TextBox currentText)
 {
     for (int i = 0; i < arrayButtons.Length; i++)
     {
         if (currentText.Text == arrayButtons[i].Text)
         {
             currentText.Text = "";
             arrayButtons[i].Visible = true;
             break;
         }
     }
 }

这样你就可以在TextBox1 Clicked:

时调用这样的方法
ChangeButtonVisibility(TextBox1);

像TextBox2一样点击

ChangeButtonVisibility(TextBox2);

答案 1 :(得分:0)

或者您可以使用文本框创建另一个数组并循环遍历两个数组:

var txts = new[] { txt1, txt2, txt3, txt4, txt5, txt6, txt7, txt8, txt9, txt10, txt11, txt12, txt13, txt14 };
var btns = new[] { btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn10, btn11, btn12, btn13, btn14 };

foreach(var txt in txts)
{
    foreach(var btn in btns)
    {
        if (txt.Text == btn.Text)
        {
            txt.Text = "";
            btn.Visible = true;
            break;
        }
    }
}

答案 2 :(得分:0)

我建议您避免编写所有特定点击事件,并为所有文本框制作一次点击事件 为此,您必须添加指向文本框标记的指针,该指针指向相应的按钮。我会在这样的表格的加载事件中这样做:

private void Form1_Load(object sender, EventArgs e)
{
    textBox1.Tag = btn1;
    textBox2.Tag = btn2;
    textBox3.Tag = btn3;
    textBox4.Tag = btn4;
    textBox5.Tag = btn5;
    textBox6.Tag = btn6;
}

现在您已将按钮作为控件的标签,您只需为所有文本框,投射发件人制作点击事件,并检查控件与其标记:

private void allTextboxes_Click(object sender, EventArgs e)
{
    if ((sender as TextBox).Text == ((sender as TextBox).Tag as Button).Text)
    {
        (sender as TextBox).Text = "";
        ((sender as TextBox).Tag as Button).Visible = true;
    }
}

我非常喜欢这种代码而不是循环。