как активировать контекстное меню для элемента списка, а не для заголовков столбцов - PullRequest
7 голосов
/ 19 марта 2012

мой Listview выглядит следующим образом

 Header1      Header2      Header3
  Item1        Item2        Item3
  Item1        Item2        Item3
  Item1        Item2        Item3

Я написал код, показывающий context menu при нажатии list view, но он также показывает Context menu на headers. Мне нужно отображать Context menu только тогда, когда пользователь нажимает Items из list view, может ли кто-нибудь мне помочь

Это мой код, который я написал в настоящее время

private void listView1_MouseClick(object sender, MouseEventArgs e)
    {
        contextMenuStrip1.Show(listView1, e.Location);
    }

Ответы [ 5 ]

13 голосов
/ 26 апреля 2012

Как насчет этого?

private void listView1_MouseClick(object sender, MouseEventArgs e)
    {
        ListView listView = sender as ListView;
        if (e.Button == System.Windows.Forms.MouseButtons.Right)
        {
            ListViewItem item = listView.GetItemAt(e.X, e.Y);
            if (item != null)
            {
                item.Selected = true;
                contextMenuStrip1.Show(listView , e.Location);
            }
        }
    }

Это настраивает его так, что контекстное меню показывает только, если щелчок правой кнопкой мыши происходит по элементу, потому что, если щелчок правой кнопкой мыши происходит по заголовку или чему-то еще, тогда элемент будетбыть нулевымНадеюсь, это поможет

9 голосов
/ 26 сентября 2012

Это может быть полезно для вас

private void listView1_MouseClick(object sender, MouseEventArgs e)
    {            
        if (e.Button == MouseButtons.Right)
        {
            if (listView1.FocusedItem.Bounds.Contains(e.Location) == true)
            {
                contextMenuStrip1.Show(Cursor.Position);
            }
        } 
    }

Свойство "Bounds" представляет собой прямоугольник, который представляет края "FocusedItem" в пикселях. Таким образом, если курсор находится в этой области прямоугольника при щелчке правой кнопкой мыши, появляется «contextMenuStrip1».

5 голосов
/ 03 апреля 2012

Вы можете отменить просмотр контекстного меню, если не выбрано ни одного элемента, который будет действителен, только если вы щелкнете правой кнопкой мыши по элементу

    /// <summary>
    /// ContextMenuStrip Opening Action
    /// </summary>
    private void listContextMenuStrip_Opening(object sender, CancelEventArgs e)
    {
        // If there are no items selected, cancel viewing the context menu
        if (connectionListView.SelectedItems.Count <= 0)
        {
            e.Cancel = true;
        }
    }
0 голосов
/ 19 марта 2012

Вы должны выбрать элемент, когда вы делаете, нажмите на него.Затем вы можете запросить выбранные элементы в списке и получить индекс выбранного элемента: listView1.SelectedItems[0].Index

if (listView1.SelectedItems[0].Index == 0)
return;
0 голосов
/ 19 марта 2012

Это довольно грязно ... просто используя информацию под рукой.Кто-то, вероятно, придет с лучшим ответом.

private void listView1_MouseClick(object sender, MouseEventArgs e)
{
    if ( e.Location.Y > headerHeightDefinedEarlier )
        contextMenuStrip1.Show(listView1, e.Location);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...