【问题标题】:ObjectListView get object with contextmenuObjectListView 使用上下文菜单获取对象
【发布时间】:2017-07-10 16:50:16
【问题描述】:

喂!

我想创建一个 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“删除”项时获取对象(而不是索引)。 另外,我觉得有一种更简单的方法可以做到这一点。

感谢您的回答。

【问题讨论】:

    标签: c# events contextmenu objectlistview


    【解决方案1】:

    我只需将设计器中的一个适当的 ContextMenuStrip 分配给 ObjectListView.ContextMenuStrip 属性,然后像这样处理相应的“删除”点击:

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

    或者您的问题中是否缺少我的要求?

    【讨论】:

    • 好吧,'RemoveObject' 只从 OLV 中删除,我的问题是它没有与 OLV 从中读取数据的列表同步。此外,当用户对 OLV 进行排序时,它使用的列表不会排序,因此它是另一个序列,因此通过 OLV 选择的索引获取另一个对象。
    • 你不能也从源列表中删除 SelectedObject 吗?对象引用应该相同。
    • 对,你说得对,昨天没时间想,也不知道这个方法,还有.SelectedObject属性,谢谢
    • SelectedObject 包含发生单击的项目这一事实是我没有从文档中得到的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多