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

Mik*_*onn 21 .net c# visual-studio-2010 winforms

如何在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");  
  }
Run Code Online (Sandbox Code Playgroud)

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

She*_*lva 33

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

  1. 在CONSFERUCTOR中,在该组件上创建一个mousewheel事件.

    InitializeComponent();
    this.pictureBox1.MouseWheel += pictureBox1_MouseWheel;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 手动创建功能.根据我的例子,称之为"pictureBox1_MouseWheel"

    private void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
    {
        //you can do anything here
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在该组件上创建一个MouseHover事件(转到PicureBox1中的属性,选择事件,找到"MouseHover"并双击"MouseHover"事件).

  4. CALL"Focus()"; MouseHover事件中的方法.

    pictureBox1.Focus();
    
    Run Code Online (Sandbox Code Playgroud)
  5. 现在运行程序.

  • 这可能会产生一种非常意外的行为,如果您单击一个textBox或想要编辑其他内容,如果您将其悬停在该面板中,这将会聚焦该面板.我不会这样做.. (2认同)

Han*_*ant 19

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

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

您将找到可以此答案中获得焦点的自定义面板的代码.


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


Ger*_*vis 7

手动连线...

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
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我看不到鼠标滚轮.有MouseCaptureChanged,MouseClick,MouseDoubleClick,MouseDown,MouseEnter,MouseHover,MpouseLeave,MouseMove,MouseUp (2认同)
  • Fwiw,它没有显示在Properties视图面板中,因为此事件的声明用"[Browsable(false)]"装饰.此外,它不会出现在IntelliSense的自动完成面板中,除非VS设置为显示高级成员(我相信VB会隐藏这些,而C#不会默认) - 这是因为它还装饰了"[EditorBrowsable(EditorBrowsableState) .高级)]". (2认同)

Ian*_*son 5

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