当前位置: 代码迷 >> VB Dotnet >> 怎么判断鼠标进入哪一个控件 并滚动相应的范围
  详细解决方案

怎么判断鼠标进入哪一个控件 并滚动相应的范围

热度:25   发布时间:2016-04-25 02:08:05.0
如何判断鼠标进入哪一个控件 并滚动相应的范围
第一点:鼠标进入控件A的时候滚动鼠标滚轮,就可以滚动控件A,然后进入控件B的时候滚动鼠标滚轮,就可以滚动控件B;
第二点:关键是鼠标在操作了控件A中的子控件后再滚动鼠标滚轮,还可以滚动控件A。
这两点要怎么实现呢?
我觉得第一点应该还是比较简单的,但是第二点中,当操作了控件A中的子控件后,控件A就失去了焦点了,此时它应该如何去响应针对于控件A的事件呢?
------解决思路----------------------
1.
[DllImport("user32.dll", SetLastError = true)]
public static extern bool GetCursorPos(out System.Drawing.Point point)

[DllImport("user32.dll", EntryPoint = "WindowFromPoint")]
public static extern IntPtr WindowFromPoint(int xPoint,   int yPoint);

2. SendMessage(1中获取到的控件句柄, 滚轮消息, 消息参数wparam, lparam);
------解决思路----------------------
MouseWheel要求控件获得焦点才会触发的,你可以试着处理下MouseEnter
panelA.MouseEnter += panel_MouseEnter;
panelB.MouseEnter += panel_MouseEnter;

private void panel1_MouseEnter(object sender, EventArgs e)
{
        sender.Focus();
}
------解决思路----------------------
#8 子控件无论是 TextBox 还是嵌套 Panel,上级 Panel 都有消息。
如有问题,那是你用的子控件有问题!
------解决思路----------------------
没必要用message,方法很简单,如果第一步你实现了的话。

首先你要明确你说的子控件是什么概念?也无所谓了,只要你能识别谁是谁的子控件就OK,然后你控件下的所有子控件,全部注册同一个MouseWheel事件,当触发时就向上寻找父控件,触发他的MouseWheel即可。也可以父控件子控件全部注册为同一个MouseWheel。

换个思路一切都很简单
  相关解决方案