C# winform listbox失去焦点的一种解决方案

来源:互联网 发布:windows 制作mac u盘 编辑:程序博客网 时间:2024/05/01 06:11

  我目前只有一个控件可以获得焦点 这个控件就包含listbox但是我不需要listbox的鼠标滚轮事件 显然listbox作为唯一的控件 自然会捕获我的焦点,根据我的检测,发现确实主窗体的OnmouseWheel根本没有相应,于是在CSDN上面找到了个主题的 看到了一种方法当然不是我这种的 但是比较类似 于是我试着尝试改版了下 结果成功了 希望对后来人有帮助!

  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设计的,当然你可以不用怎么改,只把这两个事件解决掉,但是封装起来的效果显然是必须强大的,方便试用。如果诸位有更好的方法不吝赐教,寻求更好的方法!!!