【问题标题】:ContextMenuStrip On RightClick, IF Items Are Selected In Listview?右键单击时的ContextMenuStrip,如果在Listview中选择了项目?
【发布时间】:2011-04-03 04:48:07
【问题描述】:

我有一个附加到列表视图的 ContextMenuStrip,它运行良好,但我有兴趣知道如何仅在列表视图中选择一个或多个项目时才显示它。

谢谢!

【问题讨论】:

    标签: c# winforms contextmenustrip


    【解决方案1】:

    对于阅读此主题的其他人,一个不错的方法是在未选择任何项目而不是根本不显示菜单时将菜单中的选项(在打开事件中)灰显

    if (List.SelectedItems.Count == 0)
    {
        // e.Cancel=true;
        List.Enabled = false;
    }
    else
    {
        List.Enabled = true;
    }
    

    【讨论】:

      【解决方案2】:
         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
      

      【讨论】:

        【解决方案3】:

        您可以使用Opening 事件。事件 args 有一个 Cancel 属性,以便您可以检查应用程序的状态并决定是显示菜单(不做任何事情)还是阻止它显示(通过设置 e.Cancel = true)。但是,就像@Grzenio 提到的那样,如果我右键单击的项目被自动选中,我会发现它更直观。

        另一种选择是使用Opening 事件来填充上下文菜单,其中只有一个禁用的项目,文本类似于(no item is selected) 左右;这将告知用户该命令不可用的原因。

        【讨论】:

        • 我用 if(List.SelectedItems.Count == 0){e.Cancel=true;} 谢谢!
        【解决方案4】:

        对我来说,直观的是,如果您没有选择任何项目(或者您右键单击未选择的项目),则会在您显示上下文菜单之前自动选择该项目。

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

        【讨论】:

        • 唯一的问题(而且非常小)是如果用户右键单击列表视图的列标题,菜单仍然会显示。我会尝试实施您的第二个建议,谢谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-02
        • 1970-01-01
        • 2014-01-10
        相关资源
        最近更新 更多