C# 如何基于c代码中的值设置可见的真/假

C# 如何基于c代码中的值设置可见的真/假,c#,asp.net,webforms,code-behind,C#,Asp.net,Webforms,Code Behind,我有一个输入控件列表,如日期选择器、选择框、文本框、复选框。我想根据用户选择的类型设置visible true和false 我已经尝试过下面的方法,但我只是想知道我是否可以使它干燥,并从一个单一的函数或东西进行有效的调用。任何建议都将不胜感激 请忽略文本框的命名或任何内容,因为这只是一个示例 if (attribute_type == "T") { Value1_tbx.Visible = true; // this is true Value1_tbx.Text = some_tex

我有一个输入控件列表,如日期选择器、选择框、文本框、复选框。我想根据用户选择的类型设置visible true和false

我已经尝试过下面的方法,但我只是想知道我是否可以使它干燥,并从一个单一的函数或东西进行有效的调用。任何建议都将不胜感激

请忽略文本框的命名或任何内容,因为这只是一个示例

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
};

如果要设置的控件的某些值基于属性类型的值相同,则可以使用switch语句

因此,例如,当属性_type='S'或属性_type='D'时,如果Value_ddl.Visible=false,您可以执行如下操作:

switch(attribute_type)
{
     case 'S':
     case 'D':
          Value_ddl.Visible = false;
          break;
     default:
          //default stuff
          break;
}
if (attribute_type == 'T')
    SetTControls(); 
else if (attribute_type == 'S')
    SetSControls();
else if (attribute_type == 'D')
    SetDControls();
else if (attribute_type == 'R')
    SetRControls();

它可能会在代码中节省一些空间并使其更具可读性。

在我的另一个答案的注释中,我说过如果要编写单个函数,仍然需要执行检查。但是,您可以编写多个单独的函数来设置控件的值。这样做可以减少执行检查的工作量,但需要更多的代码

创建您的功能:

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语句:

switch(attribute_type)
{
     case 'S':
     case 'D':
          Value_ddl.Visible = false;
          break;
     default:
          //default stuff
          break;
}
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语句。希望这有帮助

属性类型是字符串还是字符?您说下面的代码正在运行,但代码不应该编译,因为您正在将它与两种类型进行比较。作为旁注,如果您每次都按相同的顺序设置值,那么阅读起来会更容易-这使视觉比较更容易。@Rufusl这是一个字符。ThanksI已经编辑并按相同的顺序放置,您可以在第一个if之外将它们全部设置为false或true。然后只隐藏那些你不需要的。它保存了一些副本。我已经更新了我的问题,希望现在很容易理解。@Sri-我完全理解你的问题。我只是给你另一个选择,而不是复杂的if/else语句。不幸的是,如果您要编写一个函数来设置控件的可见性,您仍然需要以这种或那种方式执行检查。谢谢,我对编写函数不是很感兴趣。我只是想知道有没有什么方法可以把这件事以一种清晰的方式组织起来。@Sri-老实说,你这样做并没有什么错。只是有点难以理解而已。祝你好运@Sri-如果这些答案中的任何一个对你有帮助,你介意接受其中一个吗?