winform 的 mouseWheel 事件没反应,是咋回事啊

zhangsansecond 2014-10-14 05:18:17
this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.FormPic_MouseWheel);
...全文
982 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
0755雅俗共赏 2017-01-17
  • 打赏
  • 举报
回复
引用 10 楼 truediego 的回复:
Form是不能具有焦点的 最简单的办法,就是给ListView加上MouseWheel事件,做你想做的事情,或者单纯的调用你的Form的MouseWheel函数 这样实现的效果,就是在ListView上滚动的话,也做MouseWheel的事情了 如果你只想在Form上滚动的时候才做事 那么,你就添加个Button,然后给Button设置位置为 (-1000, 0),让这个Button显示到可视区域外 然后给Form添加MouseEnter事件,一旦Enter了,就把焦点设置到Button上 这样你的MouseWheel就可以在Form上响应了 缺点是,ListView会失去焦点 再或者更麻烦一点的 就是给Form加MouseEnter事件,里面只控制一个Flag 给ListView加MouseWheel事件,判断上面那个Flag,如果为真,就执行Form的MouseWheel函数 具体怎么去做,就看你自己想要的效果了,绕个圈圈,总能实现的
谢谢大神,这帖子我2017年看依旧收益。 也谢谢楼主的问题。 与我现在的一毛一样
zhangsansecond 2014-10-18
  • 打赏
  • 举报
回复
谢楼上。 我用form.activeControl =panel ,让这个面板得到焦点,但是一点其他地方,mousewheel又变成listbox的了。还是楼上的方法好
truediego 2014-10-14
  • 打赏
  • 举报
回复
Form是不能具有焦点的 最简单的办法,就是给ListView加上MouseWheel事件,做你想做的事情,或者单纯的调用你的Form的MouseWheel函数 这样实现的效果,就是在ListView上滚动的话,也做MouseWheel的事情了 如果你只想在Form上滚动的时候才做事 那么,你就添加个Button,然后给Button设置位置为 (-1000, 0),让这个Button显示到可视区域外 然后给Form添加MouseEnter事件,一旦Enter了,就把焦点设置到Button上 这样你的MouseWheel就可以在Form上响应了 缺点是,ListView会失去焦点 再或者更麻烦一点的 就是给Form加MouseEnter事件,里面只控制一个Flag 给ListView加MouseWheel事件,判断上面那个Flag,如果为真,就执行Form的MouseWheel函数 具体怎么去做,就看你自己想要的效果了,绕个圈圈,总能实现的
zhangsansecond 2014-10-14
  • 打赏
  • 举报
回复
引用 7 楼 truediego 的回复:
[quote=引用 5 楼 truediego 的回复:] 你的窗体上,有别的控件 MouseWheel事件发生在控件上,而不是你的Form上
例如ListView控件,如果你的焦点在ListView上,你的Form是接收不到MouseWheel事件的[/quote] 确实有listbox,怎么样让焦点回到窗体上
zhangsansecond 2014-10-14
  • 打赏
  • 举报
回复
引用 7 楼 truediego 的回复:
[quote=引用 5 楼 truediego 的回复:] 你的窗体上,有别的控件 MouseWheel事件发生在控件上,而不是你的Form上
例如ListView控件,如果你的焦点在ListView上,你的Form是接收不到MouseWheel事件的[/quote] 可是我用this.fouse()了也不行
truediego 2014-10-14
  • 打赏
  • 举报
回复
引用 5 楼 truediego 的回复:
你的窗体上,有别的控件 MouseWheel事件发生在控件上,而不是你的Form上
例如ListView控件,如果你的焦点在ListView上,你的Form是接收不到MouseWheel事件的
gxingmin 2014-10-14
  • 打赏
  • 举报
回复
楼上说的对,你要对哪个滚动就要哪个先得到鼠标焦点才行
truediego 2014-10-14
  • 打赏
  • 举报
回复
你的窗体上,有别的控件 MouseWheel事件发生在控件上,而不是你的Form上
gxingmin 2014-10-14
  • 打赏
  • 举报
回复
你跟踪下代码,是不是事件 ... += ... 这句没执行?
zhangsansecond 2014-10-14
  • 打赏
  • 举报
回复
是啊,新建个项目,就好用,放到我程序里,就不行。我的窗体有问题?
bdmh 2014-10-14
  • 打赏
  • 举报
回复
下面正常

this.MouseWheel += new MouseEventHandler(DoMouseEventHandler);


        private void DoMouseEventHandler(object sender, MouseEventArgs e)
        {
            MessageBox.Show("ok");
        }
gxingmin 2014-10-14
  • 打赏
  • 举报
回复
试了下可以啊
private void Form1_Load(object sender, EventArgs e)
{
    this.MouseWheel += new MouseEventHandler(Form1_MouseWheel);
}

void Form1_MouseWheel(object sender, MouseEventArgs e)
{
    if (e.Delta > 0)
    {
        this.Text = "正在向上滚动滑轮";
    }
    else
    {
        this.Text = "正在向下滚动滑轮";
    }
}

110,565

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧