【问题标题】:How to do this in c#?如何在 C# 中做到这一点?
【发布时间】:2014-02-10 13:02:15
【问题描述】:

我有一个 MyClass 列表,在主页上我有 10 个控件,它们将显示有关该项目列表的信息。我想要的是检查列表中项目的数量,然后使多余的控件不可见。现在我正在使用这段代码,但有更简单的方法吗?

 if (myList.Count > 0)
 {
      Control1.MyClassInfo = myList[0];
      if (myList.Count > 1)
      {
           Control2.MyClassInfo = myList[1];
           if (myList.Count > 2)
           {
                // and like that till 10
           }
           else
           {
                Control3.Visible = false;
                Control4.Visible = false;
                // till 10
           }
       }
       else
       {
           Control2.Visible = false;
           Control3.Visible = false;
           // till 10
       }
  }
  else
  {
       Control1.Visible = false;
       Control2.Visible = false;
       Control3.Visible = false;
       // and then till 10
  }

【问题讨论】:

  • 是一对一的关系。就像 myclass 列表中的每个项目都对应一个控件一样。

标签: c# asp.net controls


【解决方案1】:

好吧,只需将您的控件添加到列表中(有序)。

类似的东西

var controlList = new List<Control>{ Control1, Control2, Control3 /*etc*/};


var count = myList.Count;
for (var i = 0; i < controlList.Count; i++) {
  controlList[i].Visible = count > i;
}

【讨论】:

  • 感谢工作,感谢所有试图帮助我的人
【解决方案2】:

您可以创建一个控件列表

List<Control> MyControls = new List<Control>{Control1, Control2,..,Control10};

然后

foreach(var C in MyControls)
    C.Visible=false;

for(int i=0; i<myList.Count; i++)
    C[i].Visible=true;

【讨论】:

  • 好吧,拉斐尔的回答更好:)
【解决方案3】:

编辑:对于这里更高级的编码人员,此技术称为Composite Pattern

基本上就是这样。但是您可以通过两种方式改进该基本概念:

1) 使用集合

List<Control> _controls1to10;

将您的控件放入该集合并编写如下方法:

private void setVisibility(List<Control> _controls, bool visible)
{
    foreach (Control c in _controls1to10)
    {
        c.Visible = visible;
    }
}

这会让事情变得更容易。

2) 使用布尔表达式代替嵌套的ifs,像这样:

bool hasElements = myList.Count > 0;
bool hasMoreThan1 = myList.Count > 1;

// ... and so on

这意味着您在顶部有主开关,并在以下代码中使用它们。这是一个奇幻示例,用于明确概念但不适用于您的代码:

bool isEditable = User.LoggedIn && SystemState.Maintenance == false && item.Count > 0;

editButton.Visible = isEditable;
dropList.Visible = !isEditable;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多