Я делаю программу с несколькими кнопками и текстовыми полями. Программа, которую я сейчас создаю, не завершена даже на 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 ответа
Внимательно изучите код, который вы используете. То, что изменяется на основе 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:
ChangeButtonVisibility(TextBox1);
Как это для TextBox2 Clicked
ChangeButtonVisibility(TextBox2);
Я бы посоветовал вам не писать все конкретные события щелчка и сделать одно событие щелчка для всех ваших текстовых полей.
для этого вам нужно добавить указатель на тег текстового поля, который указывает на соответствующую кнопку. я бы сделал это в событии загрузки такой формы:
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;
}
}
Я бы сильно предпочел такой код циклам.
Или вы можете создать другой массив с текстовыми полями и перебрать оба массива:
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;
}
}
}
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.