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

本文介绍了一种方法,通过禁用Listbox的滚轮事件来确保父窗体能够响应OnMouseWheel事件。该方法利用Focus和Enabled属性实现,当鼠标离开Listbox时,父窗体将重新获得焦点并响应滚轮事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值