2017-07-07 240 views
0

Hy!ObjectListView獲取對象的上下文菜單

我想創建一個ObjectListView,在這裏你可以用ContextMenu刪除項目。

基本上我曾經通過獲取OLV.SelectedIndex來刪除它,然後從列表中刪除OLV,並重新設置OLV對象。 然後我意識到,如果我排序OLV,然後刪除一個項目,它會刪除另一個項目,因爲選定的項目索引不等於列表中的索引。

隨着OLV CellRightClick事件我可以得到單擊項目(e.Model)後面的對象,但我不知道如何將它傳遞給ContextMenu單擊事件處理程序。

受試者是一個列表。

private void subjectListView_CellRightClick(object sender, BrightIdeasSoftware.CellRightClickEventArgs e) 
{ 
if (subjectsListView.SelectedIndex != -1) 
{ 
ContextMenu cm = new ContextMenu(); 
cm.MenuItems.Add("Delete", new EventHandler(DeleteItem)); 
subjectsListView.ContextMenu = cm; 
} 
} 

void DeleteItem(object sender, EventArgs e) 
{ 
//get the Subject object, which was clicked on 
Subjects.RemoveAt(subjectsListView.SelectedIndex); 
subjectsListView.SetObjects(Subjects); 
} 

所以基本上我想在單擊ContextMenus「Delete」項目時獲取對象(而不是索引)。 另外,我覺得有一個更簡單的方法來做到這一點。

感謝您的回答。

回答

0

我只想分配從設計適當的ContextMenuStrip到ObjectListView.ContextMenuStrip屬性,然後辦理相應的「刪除」點擊這樣的點擊:

private void deleteToolStripMenuItem_Click(object sender, EventArgs e) { 
     if (objectListView1.SelectedObject != null) { 
      objectListView1.RemoveObject(objectListView1.SelectedObject); 
     } 
    } 

還是有我缺少的必要條件從你的問題?

+0

那麼'RemoveObject'只能從OLV中刪除,而我的問題是它沒有與列表中的OLV同步讀取數據。 另外,當用戶對OLV進行排序時,它使用的列表不會排序,所以它在另一個序列中,因此OLV選擇的索引獲取另一個對象。 – IAmFry

+0

難道你不能從源列表中移除SelectedObject嗎?對象引用應該是相同的。 –

+0

是的,你是對的,沒有時間想想昨天,也不知道這個方法,和.SelectedObject屬性,謝謝 – IAmFry