2017-07-21 183 views
1

我在ObjectListView組件中將FullRowSelect和MultiSelect屬性設置爲true,但我仍然需要通過按下Ctrl鍵來選擇多行。那麼,是否有辦法在沒有按下Ctrl或Shift鍵的情況下進行多選?有沒有方法可以在沒有按下Ctrl鍵的情況下在ObjectListView中進行多重選擇?

+0

有趣的問題。我很肯定這不是本地支持的。我認爲它不易實施。如果您不想混淆OLV代碼,一種方法可能是處理某些事件,即選擇已更改,跟蹤以前選擇的項目並在選擇結束後以編程方式重新選擇它們。 –

回答

0

我想我有一個工作解決方案。本例中的模型對象是「Item」類型。有關解釋請參閱代碼註釋。

// 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的屬性 –

相關問題