如何将具有正确属性的 MouseEventArgs 传递给事件处理程序?
How to pass a MouseEventArgs with correct properties into event handlers?
我有一个程序,其表单内有一个 FlowLayoutPanel。我正在对 FlowLayoutPanel 的 MouseMove 事件进行编码,一切正常;除了当光标在其滚动条上移动时它不会触发 MouseMove 事件。
我在网上搜索并找到了以下方法,该方法使用 FlowLayoutPanel 的派生 class,然后覆盖其 WndProc方法:
class FlowLayoutPanelEx : FlowLayoutPanel
{
const int WM_NCMOUSEMOVE = 0x00A0;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCMOUSEMOVE)
{
base.OnMouseMove(null);
}
base.WndProc(ref m);
}
}
我在提出(或调用)base.OnMouseMove() 时遇到问题。它需要一个 MouseEventArgs 对象作为参数传入。我需要传递正确的 MouseEventArgs 因为我的事件处理程序依赖于它,但我不知道如何 set/where 获得正确的属性(按钮、X、Y、等)传递正确的 MouseMoveEvent.
任何帮助将不胜感激。
您可以通过拦截 WM_NCMOUSEMOVE 消息来检测鼠标在滚动条上的移动。像这样:
protected override void WndProc(ref Message m) {
if (m.Msg == 0xA0) { // WM_NCMOUSEMOVE.
var pos = this.PointToClient(new Point(m.LParam.ToInt32()));
var evt = new MouseEventArgs(Control.MouseButtons, 0, pos.X, pos.Y, 0);
OnMouseMove(evt);
}
base.WndProc(ref m);
}
我有一个程序,其表单内有一个 FlowLayoutPanel。我正在对 FlowLayoutPanel 的 MouseMove 事件进行编码,一切正常;除了当光标在其滚动条上移动时它不会触发 MouseMove 事件。
我在网上搜索并找到了以下方法,该方法使用 FlowLayoutPanel 的派生 class,然后覆盖其 WndProc方法:
class FlowLayoutPanelEx : FlowLayoutPanel
{
const int WM_NCMOUSEMOVE = 0x00A0;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCMOUSEMOVE)
{
base.OnMouseMove(null);
}
base.WndProc(ref m);
}
}
我在提出(或调用)base.OnMouseMove() 时遇到问题。它需要一个 MouseEventArgs 对象作为参数传入。我需要传递正确的 MouseEventArgs 因为我的事件处理程序依赖于它,但我不知道如何 set/where 获得正确的属性(按钮、X、Y、等)传递正确的 MouseMoveEvent.
任何帮助将不胜感激。
您可以通过拦截 WM_NCMOUSEMOVE 消息来检测鼠标在滚动条上的移动。像这样:
protected override void WndProc(ref Message m) {
if (m.Msg == 0xA0) { // WM_NCMOUSEMOVE.
var pos = this.PointToClient(new Point(m.LParam.ToInt32()));
var evt = new MouseEventArgs(Control.MouseButtons, 0, pos.X, pos.Y, 0);
OnMouseMove(evt);
}
base.WndProc(ref m);
}