无法在C# Windows窗体中触发鼠标滚轮事件

7

首先,Visual Studio 2008的事件窗格中没有列出鼠标滚轮事件,这非常令人恼火。

不过我在网上找到了正确的格式,并将其写入我的代码:

    private void Form1_MouseWheel(object sender, MouseEventArgs e)
    {
        Debug.WriteLine("Foo");
    }

当鼠标滚轮旋转时,我从中获取不到任何响应。

我是在代码的主类区域进行操作的,设计器只包含一个窗体/窗口/什么东西,因此鼠标没有失去焦点。

namespace BlahBlah
{
    public partial class Form1 : Form
    {

相比之下,我有一个方法就在鼠标滚轮上面,它可以正常工作:

    private void Form1_MouseClick(object sender, MouseEventArgs e)
    {
        Debug.WriteLine("Foo");
    }

如果我猜的没错,我认为我没有正确地将代码链接到表单(也就是说,如果我通过设计器的事件面板添加此事件,Visual Studio会为我完成所有这些操作)。但我可能是错的或者只是犯了一些愚蠢的错误。

你能帮助我在鼠标滚轮旋转时获得任何形式的响应吗?谢谢!

4个回答

14

需要设置鼠标滚轮事件。

将以下内容添加到Form1的构造函数中(在InitalizeComponents()之后)

this.MouseWheel+= new MouseEventHandler(Form1_MouseWheel);

这就是全部了,非常感谢! 附加问题:对于我的MouseMove方法我有一个(this.MouseMove += Form1_MouseMove;),但是MouseClick没有这个。为什么不需要呢? - ck_
1
嗯...它会响应鼠标点击吗?如果不需要对鼠标点击做出反应,那么就不需要。有些控件自动链接了鼠标点击事件(用于滚动等)。这取决于你想要实现什么。 - Kurisu
我的意思是,我的MouseClick方法可以正常工作(在鼠标单击时触发),而不需要在构造函数中添加“.... += ....”之类的内容。这就是为什么我忘记为MouseWheel添加类似的内容,因为MouseClick已经很好地工作了。 - ck_
1
可能是设计师为您添加的。您可以展开窗体并查看Form1.Designer.cs文件的代码。在那里,您可能会找到它。 - Kurisu

6

我没有足够的声望来回复评论,但是你的附加问题的答案是代表确实需要设置。但是,当您通过在属性窗格中双击它来创建一个代表时,代码会自动生成并放置在InitializeComponent方法中的*.designer.cs文件中。


1
看一下 designer.cs 文件并查看区域,你会看到代码生成已经为您连接了这些事件。 - Allen Rice

2

在这种情况下,最好覆盖OnMouseWheel成员函数而不是注册事件。例如:

public class MyFrm : Form
{
    protected override void OnMouseWheel(MouseEventArgs e)
    {
        /*Handle the mouse wheel here*/
        base.OnMouseWheel(e);
    }
}

1
@JonofAllTrades 它具有更好的性能和更高的灵活性(您可以在任何订阅事件的委托之前完成工作)。 https://dev59.com/hXVC5IYBdhLWcg3w21Mq - lmat - Reinstate Monica

1

我不知道如何订阅那个特定的事件,但是你可以在表单上覆盖适当的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接