ListView Событие MouseClick

У меня есть ListView, в котором я хочу отображать одно контекстное меню, если элемент щелкнут правой кнопкой мыши, и другое, если щелчок происходит в элементе управления ListView. Проблема, с которой я сталкиваюсь, заключается в том, что событие MouseClick срабатывает только при щелчке правой кнопкой мыши по элементу, а не по элементу управления. Что вызывает это и как я могу обойти это?


person Community    schedule 12.02.2009    source источник
comment
Вы можете разместить код элемента управления asp.net и вывод html на странице?   -  person balexandre    schedule 12.02.2009


Ответы (3)


Вы можете создать подкласс ListView, чтобы добавить событие щелчка правой кнопкой мыши:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace MyCustomControls
{

public delegate void MyDelegate(Object sender, EventArgs e);

class MyListView : ListView
{

    private static readonly object EventRightClickRaised = new object();

    public MyListView() 
    {
        //RightClick += new MyDelegate(OnRightClick);
    }

    public event EventHandler RightClick
    {
        add
        {
            Events.AddHandler(EventRightClickRaised, value);
        }
        remove
        {
            Events.RemoveHandler(EventRightClickRaised, value);
        }
    }

    protected override void OnMouseUp(MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            OnRightClick(EventArgs.Empty);
        }
        base.OnMouseUp(e);
    }

    protected void OnRightClick(EventArgs e)
    {
        EventHandler RightClickRaised = (EventHandler)Events[EventRightClickRaised];
        if (RightClickRaised != null)
        {
            RightClickRaised(this, e);
        }
    }

}
}
person Patrick McDonald    schedule 12.02.2009

Используйте MouseUp вместо MouseClick! Извини за это. Надо было погуглить посильнее.

person Community    schedule 12.02.2009

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

person Pierre    schedule 26.11.2009