2012-09-28 74 views
-2

我有一個列表框和一個列表視圖。當我在列表框中選擇多個項目並單擊添加時,它會將第一個選定項目添加到列表視圖中。我無法克服這個問題。同時,列表框選擇模式被擴展。列表框多選方法

void reinit() 
{ 
    if (_adrlinks == null) 
     return; 
    object li = listAdr.SelectedItem; 
    listAdr.Items.Clear(); 
    foreach (LnkAdresse ele in _adrlinks) { 
     if (((Filter == eFilter.all) || (Filter == eFilter.basic && ele.RType <= 1) || 
      (Filter == eFilter.synteilnehmer && ele.RType == 8) || 
      (Filter == eFilter.deliveryteam && ele.RType >= 16 && ele.RType <= 31) || 
      (Filter == eFilter.explorationteam && ele.RType >= 32 && ele.RType <= 63) 
      ) && (int)ele.mut >= 0) 
     { 
      listAdr.Items.Add(ele); //listAdr is my listview 
      if (ele == li) 
       listAdr.SelectedItem = li; 
     } 
    } 
    //NotifyContent("changeDoc", "", ""); 
} 
+3

你應該給你的變量提供更好的名字。而不是像「listAdr是我的listview」這樣的評論,而是將其稱爲「addressListView」。你的ListBox在哪裏? –

回答

1

你提的問題非常模糊,以獲得從列表框中選擇多發的項目,您使用selectedItems屬性,但是如果你這樣做,我不得不作出了巨大的猜測你想用它做什麼。

Pehaps

void reinit() 
{ 
    if (_adrlinks == null) return; 
    listAdr.Items.Clear(); 
    foreach(var li in ListAdr.SelectedItems) 
    { 
    foreach (LnkAdresse ele in _adrlinks) 
    { 
     if (((Filter == eFilter.all) || (Filter == eFilter.basic && ele.RType <= 1) || (Filter == eFilter.synteilnehmer && ele.RType == 8) 
       || (Filter == eFilter.deliveryteam && ele.RType >= 16 && ele.RType <= 31) || (Filter == eFilter.explorationteam && ele.RType >= 32 && ele.RType <= 63)) 
       && (int)ele.mut >= 0) 
     { 
     listAdr.Items.Add(ele); //listAdr is my listview 
     // commented out as it won't ever be true in a multiselect scenario 
     // and wouldn't make any sense if it did 
     //if (ele == li) listAdr.SelectedItem = li; 
     } 
    } 
    } 
    //NotifyContent("changeDoc", "", ""); 
} 

也許???

+0

你是對的。它不是很清楚。我是一名新開發人員。這部分版本已經作爲我的第一部作品給了我。這就是爲什麼我不能寫清楚。 –

1

雖然沒有直接回答你的問題,但我建議你讓你的代碼更具可讀性和可維護性。也許你的問題會消失呢?

一個建議:像這樣創建

private bool TakeLinkAddress(eFilter filter, LnkAdresse linkAddress) 
{ 
    if ((int)linkAddress.mut < 0) { 
     return false; 
    } 
    int rType = linkAddress.RType; 
    switch (filter) { 
     case eFilter.all: 
      return true; 
     case eFilter.basic: 
      return rType <= 1; 
     case eFilter.synteilnehmer: 
      return rType == 8; 
     case eFilter.deliveryteam: 
      return rType >= 16 && rType <= 31; 
     case eFilter.explorationteam: 
      return rType >= 32 && rType <= 63; 
     case else: 
      return false; 
    } 
} 

過濾方法還你的變量提供更好的名字。現在你的循環看起來好多了:

foreach (LnkAdresse linkAddress in _adrlinks) { 
    if (TakeLinkAddress(filter, linkAddress)) { 
     linkAddressListView.Items.Add(linkAddress); 
     if (linkAddress == selectedLinkAddress) { 
      linkAddressListView.SelectedItem = selectedLinkAddress; 
     } 
    } 
}