我正在做一个有多个按钮和文本框的程序。我现在创建的程序甚至不完整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;
}
}
以及更多文本框。
答案 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;
}
}
我非常喜欢这种代码而不是循环。