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