Как установить видимый true / false на основе значения в коде C # позади - PullRequest
0 голосов
/ 20 марта 2019

У меня есть список элементов управления вводом, таких как Date selector, Select box, textbox, checkbox. Я хочу установить видимое значение true и false в зависимости от типа, который выбирает пользователь.

Я пробовал, что ниже работает, но просто интересно, смогу ли я сделать этот Dry и сделать эффективный вызов из одной функции или чего-то еще. Любой совет будет высоко ценится.

Пожалуйста, игнорируйте наименования текстовых полей или что-нибудь еще, поскольку это только для примера.

if (attribute_type == "T") { 
  Value1_tbx.Visible = true; // this is true
  Value1_tbx.Text = some_text_value;  // and set some value
  Value_ddl.Visible = false; 
  Value_Date_tbx.Visible = false;
  Value_Date_calendar_img.Visible = false;
  Value_rbl.Visible = false;
} else if (attribute_type == "S") {
  Value1_tbx.Visible = false;
  Value_ddl.Visible = true; // this is true
  Value_ddl.Text = some_select_box_value; // and set some value
  Value_Date_tbx.Visible = false;
  Value_Date_calendar_img.Visible = false;
  Value_rbl.Visible = false;
} else if (attribute_type == 'D') {
  Value1_tbx.Visible = false;
  Value_ddl.Visible = false;
  Value_Date_tbx.Visible = true; // this is true
  Value_Date_calendar_img.Visible = true; // calendar icon should be visible
  Value_Date_tbx.Text = some_date_value; // and set some value
  Value_rbl.Visible = false;
} else if (attribute_type == 'R') {
  Value1_tbx.Visible = false;
  Value_ddl.Visible = false;
  Value_Date_tbx.Visible = false;
  Value_Date_calendar_img.Visible = false;
  Value_rbl.Visible = true; // this is true
  Value.rbl.Text = some_value; // and set some value
};

Ответы [ 2 ]

1 голос
/ 20 марта 2019

В комментариях к моему другому ответу я сказал, что если вы хотите написать одну функцию, вам все равно придется выполнять проверки.Однако вы можете написать несколько отдельных функций, которые устанавливают значения ваших элементов управления.Это уменьшит необходимость выполнения проверок, но для потребуется больше кода.

Создайте свои функции:

public void SetTControls()
{
     Value1_tbx.Visible = true;
     Value1_tbx.Text = some_text_value;
     Value_ddl.Visible = false; 
     Value_Date_tbx.Visible = false;
     Value_Date_calendar_img.Visible = false;
     Value_rbl.Visible = false;
}

public void SetSControls()
{
    Value1_tbx.Visible = false;
    Value_ddl.Visible = true;
    Value_ddl.Text = some_select_box_value;
    Value_Date_tbx.Visible = false;
    Value_Date_calendar_img.Visible = false;
    Value_rbl.Visible = false;
}

public void SetDControls()
{
    Value1_tbx.Visible = false;
    Value_ddl.Visible = false;
    Value_Date_tbx.Visible = true;
    Value_Date_calendar_img.Visible = true;
    Value_Date_tbx.Text = some_date_value;
    Value_rbl.Visible = false;
}

public void SetRControls()
{
    Value1_tbx.Visible = false;
    Value_ddl.Visible = false;
    Value_Date_tbx.Visible = false;
    Value_Date_calendar_img.Visible = false;
    Value_rbl.Visible = true;
    Value.rbl.Text = some_value;
}

Тогда вы можете очистить свой if /оператор else, подобный следующему:

if (attribute_type == 'T')
    SetTControls(); 
else if (attribute_type == 'S')
    SetSControls();
else if (attribute_type == 'D')
    SetDControls();
else if (attribute_type == 'R')
    SetRControls();

Как я уже сказал, он требует больше кода, но определенно очищает ваш оператор if / else.Надеюсь, это поможет!

0 голосов
/ 20 марта 2019

Если некоторые из значений ваших элементов управления, которые вы устанавливаете, совпадают в зависимости от значения attribute_type, вы можете использовать оператор switch.

Так, например, если Value_ddl.Visible = false когда attribute_type == 'S' или attribute_type == 'D', вы можете сделать что-то вроде этого:

switch(attribute_type)
{
     case 'S':
     case 'D':
          Value_ddl.Visible = false;
          break;
     default:
          //default stuff
          break;
}

Это может сэкономить место в вашем коде и сделать его более читабельным.

...