C# 如果在Listview中选择了项,则右键单击ContextMenuStrip?

C# 如果在Listview中选择了项,则右键单击ContextMenuStrip?,c#,winforms,contextmenustrip,C#,Winforms,Contextmenustrip,我在列表视图中附加了一个ContextMenuStrip,它工作得很好,但我想知道的是,如何在列表视图中选择一个或多个项目时才能显示它 谢谢 对我来说,直观的感觉是,如果您没有选择任何项目(或右键单击未选择的项目),则该项目将在显示关联菜单之前自动被选中 如果第一个解决方案不可接受,我想我会尝试在选中项目时附加ContextMenuStrip,在取消选中项目时将其分离。您可以使用该事件。event args有一个Cancel属性,因此您可以检查应用程序的状态,并决定是让菜单显示(不执行任何操作)

我在列表视图中附加了一个ContextMenuStrip,它工作得很好,但我想知道的是,如何在列表视图中选择一个或多个项目时才能显示它


谢谢

对我来说,直观的感觉是,如果您没有选择任何项目(或右键单击未选择的项目),则该项目将在显示关联菜单之前自动被选中

如果第一个解决方案不可接受,我想我会尝试在选中项目时附加ContextMenuStrip,在取消选中项目时将其分离。

您可以使用该事件。event args有一个Cancel属性,因此您可以检查应用程序的状态,并决定是让菜单显示(不执行任何操作)还是阻止它显示(设置
e.Cancel=true
)。然而,就像@Grzenio提到的,如果我右键单击的项目自动被选中,我会发现它更直观


另一个选项是使用
打开
事件,仅用一个禁用的项目填充上下文菜单,文本类似
(未选择任何项目)
左右;这将通知用户该命令不可用的原因。

对于阅读此线程的其他人,一个好方法是在未选择任何项目时,将菜单中的选项(在打开事件中)灰显,而不是完全不显示菜单

   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
if (List.SelectedItems.Count == 0)
{
    // e.Cancel=true;
    List.Enabled = false;
}
else
{
    List.Enabled = true;
}
唯一的问题(这是很小的)是,如果用户右键单击listview的列标题,菜单仍然会显示出来。我将尝试实施你的第二个建议,谢谢!我将其用于if(List.SelectedItems.Count==0){e.Cancel=true;}谢谢!