我目前只有一个控件可以获得焦点 这个控件就包含listbox但是我不需要listbox的鼠标滚轮事件 显然listbox作为唯一的控件 自然会捕获我的焦点,根据我的检测,发现确实主窗体的OnmouseWheel根本没有相应,于是在优快云上面找到了个主题的 看到了一种方法当然不是我这种的 但是比较类似 于是我试着尝试改版了下 结果成功了 希望对后来人有帮助!
protected override void OnMouseHover(EventArgs e)
{
this.Focus();
this.Enabled = true;
base.OnMouseHover(e);
}
protected override void OnMouseLeave(EventArgs e)
{
this.Enabled = false;
Parent.Focus();
this.Enabled = true;
base.OnMouseLeave(e);
}
以上代码实现了鼠标在listbox区域的时候则onmousewheel只传给listbox而不会传给父窗体,然后当不在listbox区域内的时候就会相应父窗体的onmousewheel
disable设置之后是不能获得焦点的,这样父窗体(或者控件)获得了焦点,然后在disable = false;这样焦点巧妙的躲过了listbox的捕获,话说微软搞界面的部门真心稀烂,什么东西搞的必须走后门。。。
说明:这个是我自定义扩张了listbox设计的,当然你可以不用怎么改,只把这两个事件解决掉,但是封装起来的效果显然是必须强大的,方便试用。如果诸位有更好的方法不吝赐教,寻求更好的方法!!!