2017-07-21 28 views
1

ObjectListViewコンポーネントでFullRowSelectプロパティとMultiSelectプロパティをtrueに設定しましたが、Ctrlキーを押しながら複数の行を選択する必要があります。ですから、CtrlキーやShiftキーを押さなくてもマルチ選択を行う方法はありますか?Ctrlキーを押さずにObjectListViewで複数選択を行う方法はありますか?

+0

興味深い質問です。私はこれがネイティブにサポートされていないことは確かです。私はそれを実装するのは簡単ではないと思います。 OLVコードを混乱させたくない場合は、おそらく、選択が変更されたイベントを処理し、以前選択したアイテムを追跡し、選択が終了した後にプログラムで再選択する方法があります。 –

答えて

0

私は解決策があると思います。この例のモデルオブジェクトは、タイプ「アイテム」である。いくつかの説明については、コードコメントを参照してください。

// We require a list to remember which items should stay selected 
private List<Item> _MultiSelectList; 

public Form1() { 
    // <other stuff> 
    _MultiSelectList = new List<Item>(); 
} 

// use this event to check which item has been clicked 
private void objectListView1_MouseClick(object sender, MouseEventArgs e) { 
    objectListView1.BeginUpdate(); 

    // any item clicked? 
    if (objectListView1.MouseMoveHitTest.Item != null) { 
     var item = objectListView1.MouseMoveHitTest.Item.RowObject as Item; 

     // model object of expected type available? 
     if (item != null) { 
      // add or remove item from list to effectively toggle selection 
      if (_MultiSelectList.Contains(item)) { 
       _MultiSelectList.Remove(item); 
      } else { 
       _MultiSelectList.Add(item); 
      } 
     } 
    } 

    // select all desired items 
    objectListView1.SelectObjects(_MultiSelectList); 
    objectListView1.EndUpdate(); 
} 

// optional: to prevent flickering from the native item selection change, we freeze the OLV contents during the mouse click 
private void objectListView1_MouseDown(object sender, MouseEventArgs e) { 
    objectListView1.Freeze(); 
} 

private void objectListView1_MouseUp(object sender, MouseEventArgs e) { 
    objectListView1.Unfreeze(); 
} 
+0

それは素晴らしい作品です!どうもありがとうございました! –

+0

完了。しかし、私はここでは初心者であり、評判は15歳未満であるため、今は投票できませんでした。ちなみに、選択された行の最後の行を選択解除する簡単な方法はありますか? "_MultiSelectList"の行を他の行に対して選択解除するのは簡単ですが、行をクリックして最後の行を選択解除すると再び強調表示されます。 –

+0

ObjectListViewの属性であるかどうかわからない –

関連する問題