如何捕捉面板上的鼠标滚轮?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何捕捉面板上的鼠标滚轮?相关的知识,希望对你有一定的参考价值。

如何在C#中捕获面板上的鼠标滚轮?我正在使用WinForms

编辑:

我现在尝试在PictureBox上做。

我的代码:

this.pictureBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseClick);    
this.pictureBox1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseClick);
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)  
  {  
    MessageBox.Show("Click");  
  }

点击即可。催促没有。为什么?

答案

Windows将WM_MOUSEWHEEL消息发送到具有焦点的控件。那不是Panel,它不是一个可以得到关注的控件。一旦你在面板上放一个控件,比如一个按钮,那么按钮就会获得焦点和消息。

然而,按钮没有用于消息,它没有任何滚动。 Windows注意到这一点并将消息发送给父级。这是小组,现在它将滚动。

您将找到可以在this answer中获得焦点的自定义面板的代码。


更新:请注意,此行为在Windows 10中已更改。默认情况下,“将鼠标悬停在其上时滚动非活动窗口”选项。使鼠标滚轮的行为与其在浏览器或Office程序中的工作方式更加一致。在这种特定情况下,图片框现在将获得该事件。当心这个。

另一答案

如果您在组件上看不到“MouseWheel”事件,则需要手动创建它。此外,我们需要关注该组件,否则“MouseWheel”事件将不适用于该组件。我将向您展示如何为“pictureBox1”创建“MouseWheel”事件及其工作原理。

  1. 在CONSFERUCTOR中,在该组件上创建一个mousewheel事件。 InitializeComponent(); this.pictureBox1.MouseWheel += pictureBox1_MouseWheel;
  2. 手动创建功能。根据我的例子,称之为“pictureBox1_MouseWheel” private void pictureBox1_MouseWheel(object sender, MouseEventArgs e) { //you can do anything here }
  3. 在该组件上创建一个MouseHover事件(转到PicureBox1中的属性,选择事件,找到“MouseHover”并双击“MouseHover”事件)。
  4. CALL“Focus()”; MouseHover事件中的方法。 pictureBox1.Focus();
  5. 现在运行程序。
另一答案

手动连线...

this.panel1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseWheel);

private void panel1_MouseWheel(object sender, System.Windows.Forms.MouseEventArgs e)
{
    ///process mouse event
}

更简单的方法是在visual studio中单击面板,转到属性viewpanel,选择事件,找到并双击“mousewheel”事件。

另一答案

在Winforms中,这是使用Control.MouseWheel event实现的

另一答案

获得鼠标滚轮事件非常棘手。最简单的方法是使用

this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseWheel);

代替

this.panel1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseWheel);

这样,表单获取事件而不是控件。这种方式很简单但有一个问题:您只能在表单中使用一个鼠标滚轮事件。

如果你有多个控件来获得mousewheel事件,最好的方法是This answer by "Shehan Silva - weltZ"

以上是关于如何捕捉面板上的鼠标滚轮?的主要内容,如果未能解决你的问题,请参考以下文章

如何捕捉键盘和鼠标事件?

如何使用鼠标滚轮滚动面板?

需要鼠标滚动滚动用户控件

在Edge里鼠标滚轮一动,页面就前进或后退了。怎样取消这个功能?

ulli鼠标滚轮水平滚动

如何让DbGrid支持鼠标滚轮滚动