【问题标题】:how to set visible true/false based on value in c# code behind如何根据后面的c#代码中的值设置可见的真/假
【发布时间】:2019-03-20 18:35:53
【问题描述】:

我有一个输入控件列表,例如 Date selector, Select box, textbox, checkbox。我想根据用户选择的类型设置可见的真假。

我已经尝试过下面的工作,但只是想知道我是否可以使这个 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
};

【问题讨论】:

  • attribute_typestring 还是 char?你说“下面的工作正常”,但代码不应该编译,因为你正在将它与两种类型进行比较
  • 附带说明一下,如果您每次都以相同的顺序设置值会更容易阅读 - 它使视觉比较更容易。
  • @Rufusl 这是一个字符。谢谢
  • 我已经编辑并按相同的顺序放置了
  • 您可以在第一个 if 之外将它们全部设置为 false 或 true。然后只隐藏你不需要的那些。它保存了一些重复项。

标签: c# asp.net webforms code-behind


【解决方案1】:

在我的另一个答案的 cmets 中,我说如果你要编写一个函数,你仍然需要执行检查。但是,您可以编写多个单独的函数来设置控件的值。这样做可以减轻执行检查的负担,但需要更多代码。

创建你的函数:

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 语句。希望这会有所帮助!

【讨论】:

    【解决方案2】:

    如果您设置的控件的某些值与 attribute_type 的值相同,则可以使用 switch 语句。

    例如,如果Value_ddl.Visible = falseattribute_type == 'S'attribute_type == 'D',你可以这样做:

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

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

    【讨论】:

    • 我已经更新了我的问题,希望现在很容易理解。
    • @Sri - 我理解你的问题很好。除了复杂的 if/else 语句之外,我只是给了你另一个选择。不幸的是,如果您要编写一个函数来设置控件的可见性,您仍然必须以一种或另一种方式执行检查。
    • 谢谢,我不太热衷于编写函数。只是想知道有没有办法以一种清晰的方式整理出来。
    • @Sri - 老实说,你这样做的方式并没有错。只是有点难以理解。祝你好运!
    • @Sri - 如果这些答案中的任何一个对您有帮助,您介意接受其中一个吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多