r.mirzojonov
r.mirzojonov

Reputation: 1249

How to do this in c#?

I have a List of MyClass and in the main page I have 10 controls which will display the information about that list of Items. What I want is to check the count of the items in the List and then make the excess controls invisible. Now I'm using this code but is there an easier way of doing this?

 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
  }

Upvotes: 1

Views: 96

Answers (3)

pid
pid

Reputation: 11607

EDIT: for the more advanced coders here, this technique is called the Composite Pattern.

Basically, that's it. But you can improve on that basic concept in two ways:

1) use a collection

List<Control> _controls1to10;

Put your controls into that collection and write a method like this:

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

This will make things easier.

2) use boolean expressions instead of nested ifs, like this:

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

// ... and so on

This means that you have master switches at the top and use them in the following code. This is a fantasy example to clear the concept but does not apply to your code:

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

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

Upvotes: 1

Tarec
Tarec

Reputation: 3255

You could create a list of your controls

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

and then

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

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

Upvotes: 3

Rapha&#235;l Althaus
Rapha&#235;l Althaus

Reputation: 60503

Well, just add your controls in a list (ordered).

Something like that

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

Upvotes: 4

Related Questions