如何在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");
}
点击即可。催促没有。 为什么呢?
答案 0 :(得分:33)
如果在组件上看不到“MouseWheel”事件,则需要手动创建。此外,我们需要关注该组件,否则“MouseWheel”事件将不适用于该组件。我将向您展示如何为“pictureBox1”创建“MouseWheel”事件及其工作原理。
在构造函数中,在该组件上创建一个鼠标滚轮事件。
InitializeComponent();
this.pictureBox1.MouseWheel += pictureBox1_MouseWheel;
手动创建功能。根据我的例子,称之为“pictureBox1_MouseWheel”
private void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
{
//you can do anything here
}
在该组件上创建一个MouseHover事件(转到PicureBox1中的属性,选择事件,找到“MouseHover”并双击“MouseHover”事件)。
CALL“Focus()”; MouseHover事件中的方法。
pictureBox1.Focus();
现在运行程序。
答案 1 :(得分:20)
Windows将WM_MOUSEWHEEL消息发送给具有焦点的控件。那不是Panel,它不是一个可以得到关注的控件。只要你在面板上放一个控件,比如一个按钮,那么按钮就会得到焦点和消息。
但按钮没有用于消息,它没有任何滚动功能。 Windows注意到这一点并将消息发送给父级。那是小组,现在它会滚动。
您可以找到可以在this answer中获得焦点的自定义面板的代码。
更新:请注意,此行为在Windows 10中已更改。默认情况下,“当我将鼠标悬停在其上时滚动非活动窗口”选项。使鼠标滚轮的行为与其在浏览器或Office程序中的工作方式更加一致。在这种特定情况下,现在的图片框将获得该事件。请注意这一点。
答案 2 :(得分:6)
手动连线...
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”事件。
答案 3 :(得分:5)
在Winforms中,这是使用Control.MouseWheel event
实现的答案 4 :(得分:1)
获取鼠标滚轮事件非常棘手。最简单的方法是使用
this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseWheel);
而不是
this.panel1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseWheel);
这样,表单获取事件而不是控件。这种方式很简单但有一个问题:您只能在表单中使用一个鼠标滚轮事件。
如果您有多个控件来获取鼠标滚轮事件,最好的方法是This answer by "Shehan Silva - weltZ"