2012-09-28 1 views
-2

J'ai une listbox et une listview. Lorsque je sélectionne plusieurs éléments dans Listbox et que je clique pour ajouter, il ajoute le premier élément sélectionné à la liste. Je ne peux pas surmonter ce problème. Pendant ce temps, le mode de sélection Listbox est étendu.Méthode de sélection multiple ListBox

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

Vous devriez donner de meilleurs noms à vos variables. Au lieu d'avoir des commentaires comme "listAdr est ma listview", appelez-le 'addressListView' à la place. Où est votre ListBox? –

Répondre

1

Votre question est extrêmement claire, pour obtenir mutiple éléments sélectionnés dans la liste, vous utilisez la propriété SelectedItems, si vous le faites, je vais avoir à faire une énorme deviner ce que vous voulez faire avec .

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", "", ""); 
} 

peut-être ???

+0

vous avez raison. Ce n'est pas si clair. Je suis un nouveau développeur. Cette partie de l'édition m'a été donnée comme mon premier travail. C'est pourquoi je ne pouvais pas écrire clairement. –

1

Tout en ne répondant pas directement à votre question, je vous suggère de rendre votre code plus lisible et maintenable. Peut-être que votre problème disparaîtra alors?

Une suggestion: Créer une méthode de filtrage comme celui-ci

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

donner également de meilleurs noms à vos variables. Maintenant, votre boucle semble beaucoup plus agréable:

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