2010-08-24 59 views

回答

4

您可以使用Opening事件。事件參數具有取消屬性,因此您可以檢查應用程序的狀態,並決定是否顯示菜單(不做任何事)或防止顯示菜單(通過設置e.Cancel = true)。不過,就像@Grzenio提到的那樣,如果我右鍵單擊的項目被自動選中,我會發現它更直觀。

另一種選擇是使用Opening事件來填充只有一個禁用項目的上下文菜單,其中的文本類似(no item is selected)左右;這會通知用戶爲什麼該命令不可用。

+0

我用if(List.SelectedItems.Count == 0){e.Cancel = true;} 謝謝! – sooprise 2010-08-24 14:20:46

2

對我來說,直觀的是,如果你沒有選擇任何項目(或者你右鍵單擊一個非選定的項目),該項目將在你顯示上下文菜單之前自動選擇。

如果第一個解決方案是不可接受的,我想我會嘗試附加ContextMenuStrip當項目被選中,並且當它們被取消選擇時將其解除。

+0

不顯示的菜單中沒有商品唯一的問題(它很微小)是,如果用戶右鍵單擊列表視圖的列標題,菜單仍然顯示。我會盡力實施你的第二個建議,謝謝! – sooprise 2010-08-24 14:03:52

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 
3

對於其他人閱讀此線程,一個很好的辦法就是變灰在菜單中的選項(在開業活動)當選擇,而不是在所有

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