我有一個ContextMenuStrip附加到列表視圖,它的工作很好,但我感興趣的是知道如何才能讓它顯示只有當在列表視圖中選擇一個或多個項目。ContextMenuStrip在RightClick上,在ListView中選擇IF項目?
謝謝!
我有一個ContextMenuStrip附加到列表視圖,它的工作很好,但我感興趣的是知道如何才能讓它顯示只有當在列表視圖中選擇一個或多個項目。ContextMenuStrip在RightClick上,在ListView中選擇IF項目?
謝謝!
您可以使用Opening
事件。事件參數具有取消屬性,因此您可以檢查應用程序的狀態,並決定是否顯示菜單(不做任何事)或防止顯示菜單(通過設置e.Cancel = true
)。不過,就像@Grzenio提到的那樣,如果我右鍵單擊的項目被自動選中,我會發現它更直觀。
另一種選擇是使用Opening
事件來填充只有一個禁用項目的上下文菜單,其中的文本類似(no item is selected)
左右;這會通知用戶爲什麼該命令不可用。
對我來說,直觀的是,如果你沒有選擇任何項目(或者你右鍵單擊一個非選定的項目),該項目將在你顯示上下文菜單之前自動選擇。
如果第一個解決方案是不可接受的,我想我會嘗試附加ContextMenuStrip當項目被選中,並且當它們被取消選擇時將其解除。
不顯示的菜單中沒有商品唯一的問題(它很微小)是,如果用戶右鍵單擊列表視圖的列標題,菜單仍然顯示。我會盡力實施你的第二個建議,謝謝! – sooprise 2010-08-24 14:03:52
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;
}
我用if(List.SelectedItems.Count == 0){e.Cancel = true;} 謝謝! – sooprise 2010-08-24 14:20:46