Réponse acceptée !
Je propose quelque chose dans ce style:
using System;
using System.Windows.Forms;
namespace Bidou
{
publicclassContainerLevelMouseEventsMessageFilter : IMessageFilter
{
privateconstint WM_LBUTTONDOWN = 0x0201;
privateControl _container = null;
publiceventMouseEventHandler MouseClick = null;
public ContainerLevelMouseEventsMessageFilter(Control container)
{
if (container == null) thrownewArgumentNullException("container is null");
this._container = container;
this._container.Disposed += newEventHandler(this.container_Disposed);
}
protectedvirtualvoid OnMouseClick(MouseButtons mouseB, int nbClick, int x, int y, int delta)
{
MouseEventArgs e = newMouseEventArgs(mouseB, nbClick, x, y, delta);
if (this.MouseClick != null) this.MouseClick(this._container, e);
}
publicbool PreFilterMessage(refMessage m)
{
if (m.Msg == WM_LBUTTONDOWN)
{
Control ctrl = Control.FromHandle(m.HWnd);
if (ctrl != null && (ctrl == this._container || this._container.Contains(ctrl)))
{
this.OnMouseClick(MouseButtons.Left, 1, 10, 10, 10); // Récuprer les vraies valeurs...
returntrue;
}
}
returnfalse;
}
privatevoid container_Disposed(object sender, EventArgs e)
{
try
{
this._container = null;
Application.RemoveMessageFilter(this);
}
catch { }
}
}
}
-My
Blog-