2014-02-10 95 views
1

我有一個MyClass的列表,並在主頁面我有10個控件將顯示有關該項目列表的信息。我想要的是檢查列表中項目的數量,然後使多餘的控件不可見。現在我正在使用這段代碼,但有沒有更簡單的方法呢?如何在c#中做到這一點?

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 
    } 
+0

它是一個一對一的關係。像在myclass列表中的每個項目都對應一個控件一樣。 – TYY

回答

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

感謝工作,並感謝大家試圖幫助我 –

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; 
+0

好吧,拉斐爾的答案更好:) – Tarec

+0

嗯,這是一個觀點,你的也許更具可讀性,所以... –

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;