Как я могу исключить повторение кода при настройке видимости элемента управления?

#c#

#c#

Вопрос:

У меня есть 4 текстовых поля, я пишу 4 функции, в каждой функции я хочу, чтобы одно текстовое поле было видимым true, другие false.

 function1()
{
    Txtbox1.visible=true;
    Txtbox2.visble=false;
    Txtbox3.visible=false;
    TxtBox4.visible=false;
}
  

аналогичным образом я пишу еще 3 функции, чтобы сделать видимость других текстовых полей равной true.Как выполнить оптимизацию кода c #,Asp.net

Ответ №1:

Настройте TextBox массив. Например

 TextBox[] textboxes = { TxtBox1, TxtBox2, TxtBox3, TxtBox4 }; 
  

Затем вы можете написать функцию для настройки видимости по индексу.

 void SetVisibility(int index)
{
    // do index validation 

    textboxes[index].Visible = true;
    for (int i = 0; i < textboxes.Length; i  )
    {
        if (i != index) textboxes[i].Visible = false;
    }
}
  

Итак, теперь вместо вызова function1(), function()2, // etc. вы должны вызвать SetVisibility(0), SetVisibility(1) .

Ответ №2:

Напишите одну функцию, которая устанавливает для всех 4 видимых элементов управления значение false, затем устанавливает желаемый элемент управления (передаваемый в качестве параметра) в значение true:

 private void ShowTextBox(TextBox target)
{
    Txtbox1.Visible = false;
    Txtbox2.Visible = false;
    Txtbox3.Visible = false;
    Txtbox4.Visible = false;
    target.Visible = true;
}
  

Затем вызовите функцию, передающую экземпляр textbox, который вы хотите сделать видимым:

 ShowTextBox(Txtbox1);
  

Ответ №3:

Подобно другим, вы также можете использовать LINQ, чтобы сделать это несколькими различными способами.

 TextBox[] allTextBoxes = { TxtBox1, TxtBox2, TxtBox3, TxtBox4 };

void SetVisibility(TextBox visibleTextBox)
{
    allTextBoxes.Except(new TextBox[] { visibleTextBox })
                .ToList()
                .ForEach(t => t.Visible = false);

    visibleTextBox.Visible = true;
}
  

Использование:

 SetVisibility(Txtbox1);
  

Вы также могли бы сделать это так, чтобы вы могли установить несколько (или ни одного, чтобы все были скрыты) видимых одновременно (есть еще больше способов сделать это):

 void SetVisibility1(params TextBox[] visibleTextBoxes)
{
    var visibleList = visibleTextBoxes.ToList();

    foreach (TextBox t in allTextBoxes)
    {
        t.Visible = visibleList.Contains(t);
    }
}

void SetVisibility2(params TextBox[] visibleTextBoxes)
{
    allTextBoxes.Except(visibleTextBoxes).ToList().ForEach(t => t.Visible = false);
    visibleTextBoxes.ToList().ForEach(t => t.Visible = true);
}

void SetVisibility3(params TextBox[] visibleTextBoxes)
{
    var visibleList = visibleTextBoxes.ToList();
    allTextBoxes.ToList().ForEach(t => t.Visible = visibleList.Contains(t));
}