ContextMenuStrip На RightClick, если элементы выбираются в ListView? - PullRequest
3 голосов
/ 24 августа 2010

У меня есть ContextMenuStrip, присоединенный к представлению списка, и он прекрасно работает, но мне интересно знать, как я могу показать его только тогда, когда один или несколько элементов выбраны в представлении списка.

Спасибо!

Ответы [ 4 ]

4 голосов
/ 24 августа 2010

Вы можете использовать событие Opening.Аргументы события имеют свойство Cancel, чтобы вы могли проверить состояние вашего приложения и решить, показывать ли меню (ничего не делая) или не показывать его (установив e.Cancel = true).Однако, как упоминает @Grzenio, я бы нашел более интуитивно понятным, если бы элемент, по которому я щелкнул правой кнопкой мыши, стал выбран автоматически.

Другой вариант - использовать событие Opening для заполнения контекстного менюодин отключенный элемент с текстом типа (no item is selected) или около того;это сообщит пользователю о том, почему команда недоступна.

3 голосов
/ 02 января 2012

Для других людей, читающих эту ветку, хорошим способом является выделение серым цветом пунктов меню (в событии открытия), когда элементы не выбраны, вместо того, чтобы вообще не отображать меню

if (List.SelectedItems.Count == 0)
{
    // e.Cancel=true;
    List.Enabled = false;
}
else
{
    List.Enabled = true;
}
2 голосов
/ 24 августа 2010

Для меня интуитивно понятно, что если у вас нет выбранных элементов (или если вы щелкнете правой кнопкой мыши по невыбранному элементу), элемент будет выбран автоматически перед тем, как вы откроете контекстное меню.первое решение неприемлемо, я думаю, что я бы попытался присоединить ContextMenuStrip, когда элементы были выделены, и отсоединить его, когда они не выбраны.

1 голос
/ 09 апреля 2011
   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
...