如何在c#中执行此操作?

时间:2014-02-10 13:02:16

标签: c# asp.net controls

我有一个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
  }

3 个答案:

答案 0 :(得分:4)

好吧,只需在列表中添加您的控件(已订购)。

像这样的东西

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

答案 1 :(得分:3)

您可以创建控件列表

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;

答案 2 :(得分:1)

编辑:对于此处更高级的编码器,此技术称为Composite Pattern

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

1)使用集合

List<Control> _controls1to10;

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

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

这会让事情变得更容易。

2)使用布尔表达式而不是嵌套的if s,如下所示:

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;