2

我不确定它叫什么或我应该查找什么。我正在使用附加的列表框和 ContentMenuStriplistBox1.ContextMenuStrip = contextMenuStrip1;

我想在我的列表框中右键单击项目并选择“删除”之类的内容。使用我现在拥有的内容,我可以单击列表框上的任何位置,并将结果应用于当前选定的项目。这令人困惑并且容易出错。

我如何使右键单击实际上映射到我的鼠标悬停的元素,并且当它不在元素上时不显示右键单击菜单(列表框中的空白区域)。

4

1 回答 1

2

简单的解决方案(不完全是你要求的我知道的),只是确保在允许打开菜单之前选择一个项目。

您可以通过注册ContextMenuStrip.Opening事件来完成此操作,如果没有选择任何项目,则取消它。

如果我想到更聪明的东西,我会更新:)

[编辑]

好的,酷,有一个IndexFromPoint方法ListBox。您可以使用它来确定鼠标是否在某个项目上!如果您需要代码示例,请告诉我。

[编辑2]

好吧,好吧,我忍不住了..给你:

void ContextMenuStrip_Opening(object sender, System.ComponentModel.CancelEventArgs e)
    {
        if (listBox1.IndexFromPoint(listBox1.PointToClient(Cursor.Position)) == -1)
            e.Cancel = true;
    }
于 2012-08-11T19:33:59.670 回答