【发布时间】:2011-04-03 04:48:07
【问题描述】:
我有一个附加到列表视图的 ContextMenuStrip,它运行良好,但我有兴趣知道如何仅在列表视图中选择一个或多个项目时才显示它。
谢谢!
【问题讨论】:
标签: c# winforms contextmenustrip
我有一个附加到列表视图的 ContextMenuStrip,它运行良好,但我有兴趣知道如何仅在列表视图中选择一个或多个项目时才显示它。
谢谢!
【问题讨论】:
标签: c# winforms contextmenustrip
对于阅读此主题的其他人,一个不错的方法是在未选择任何项目而不是根本不显示菜单时将菜单中的选项(在打开事件中)灰显
if (List.SelectedItems.Count == 0)
{
// e.Cancel=true;
List.Enabled = false;
}
else
{
List.Enabled = true;
}
【讨论】:
Private Sub ListView1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseUp
If e.Button = MouseButtons.Right And ListView1.SelectedItems.Count > 0 Then
Dim cn As New ContextMenuStrip()
cn.Items.Add("Apple")
Me.ListView1.ContextMenuStrip = cn
cn.Show(Control.MousePosition.X, Control.MousePosition.Y)
End If
End Sub
【讨论】:
您可以使用Opening 事件。事件 args 有一个 Cancel 属性,以便您可以检查应用程序的状态并决定是显示菜单(不做任何事情)还是阻止它显示(通过设置 e.Cancel = true)。但是,就像@Grzenio 提到的那样,如果我右键单击的项目被自动选中,我会发现它更直观。
另一种选择是使用Opening 事件来填充上下文菜单,其中只有一个禁用的项目,文本类似于(no item is selected) 左右;这将告知用户该命令不可用的原因。
【讨论】:
对我来说,直观的是,如果您没有选择任何项目(或者您右键单击未选择的项目),则会在您显示上下文菜单之前自动选择该项目。
如果第一个解决方案不可接受,我想我会尝试在选择项目时附加 ContextMenuStrip,并在取消选择项目时将其分离。
【讨论】: