我有一个附加到列表视图的ContextMenuStrip,它工作得很好,但我感兴趣的是我只有在列表视图中选择了一个或多个项目时才能显示它。
谢谢!
答案 0 :(得分:4)
您可以使用Opening
事件。事件args具有Cancel属性,因此您可以检查应用程序的状态并决定是否显示菜单(通过执行任何操作)或阻止其显示(通过设置e.Cancel = true
)。但是,就像@Grzenio提到的那样,如果我右键单击的项目被自动选中,我会发现它更直观。
另一种选择是使用Opening
事件仅使用一个禁用项目填充上下文菜单,其中包含(no item is selected)
左右的文本;这将告知用户该命令不可用的原因。
答案 1 :(得分:3)
对于阅读此主题的其他人来说,一个不错的方法是在没有选择任何项目而不是根本不显示菜单时使菜单中的选项变灰(在Opening事件中)
if (List.SelectedItems.Count == 0)
{
// e.Cancel=true;
List.Enabled = false;
}
else
{
List.Enabled = true;
}
答案 2 :(得分:2)
对我而言,直观的是,如果您没有选择任何项目(或右键单击未选择的项目),则会在显示上下文菜单之前自动选择该项目。
如果第一个解决方案不可接受,我想我会尝试在选择项目时附加ContextMenuStrip,并在取消选择项目时将其分离。
答案 3 :(得分:1)
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