tags:

views:

1142

answers:

3

Hi. I have a ListView whereby I want to display one context menu if an item is right-clicked, and another if the click occurs in the ListView control. The problem I'm getting is the MouseClick event is only firing when an item is right-clicked, not the control. What's causing this and how can I get around it?

+2  A: 

Use MouseUp instead of MouseClick! Sorry about that. Should have googled harder.

+1  A: 

You could subclass the ListView to add a right-click event:

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);
        }
    }

}
}
Patrick McDonald
A: 

I had similar problem (want to catch right clicks on the control), the solution was using MouseEnter(). Should be helpful for what you want to do.

Pierre