The WinForms ListView control fires double click events only if the user clicked on a selected item. This is also documented on the MSDN site: “The mouse pointer must be over a child object (TreeNode or ListViewItem).” (Control.DoubleClick Event).
Sometimes it is useful to perform actions on double click events for empty ListView controls, too.
To achieve this you have to implement a custom ListView control which inherits from the original WinForms ListView control:
using System;
using System.Security.Permissions;
using System.Windows.Forms;
internal class CustomListView : ListView
{
private const int WM_LBUTTONDBLCLK = 515;
private bool doubleClickFired;
protected override void OnDoubleClick(EventArgs e)
{
base.OnDoubleClick(e);
this.doubleClickFired = true;
}
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
protected override void WndProc(ref Message m)
{
this.doubleClickFired = false;
base.WndProc(ref m);
if (m.Msg == WM_LBUTTONDBLCLK && !this.doubleClickFired)
{
this.OnDoubleClick(EventArgs.Empty);
}
}
}
This custom control checks whether a double click event was triggered for double clicks of the left mouse button on the control. If this is not the case, it triggers a double click event “manually”.
Comments are closed, but trackbacks and pingbacks are open.