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

2 に答える 2

1

質問に直接答えることはしませんが、コードをより読みやすく、保守しやすくすることをお勧めします。たぶんあなたの問題は消えますか?

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;
        }
    }
}
于 2012-09-28T23:01:06.840 に答える
1

あなたの質問は非常に不明確です。リストボックスから複数の選択されたアイテムを取得するには、SelectedItems プロパティを使用します。

おそらく

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

多分 ???

于 2012-09-28T21:55:17.217 に答える