单击鼠标单击自定义按钮运行2次单击事件

时间:2018-03-13 15:30:56

标签: c# winforms

我在winform应用程序中创建了一个继承Button类的自定义按钮,并将鼠标事件设置如下

private void _MouseDown(object sender, MouseEventArgs mevent)
    {
        MState = MouseState.Down;
        Invalidate();
    }

    private void _MouseUp(object sender, MouseEventArgs mevent)
    {
        MState = MouseState.Up;
        Invalidate();
    }

    private void _MouseMove(object sender, MouseEventArgs mevent)
    {
        MState = MouseState.Move;
        Invalidate();
    }

    private void _MouseLeave(object sender, EventArgs e)
    {
        MState = MouseState.Leave;
        Invalidate();
    } 

并在构造函数中设置

        this.MouseLeave += new EventHandler(_MouseLeave);
        this.MouseDown += new MouseEventHandler(_MouseDown);
        this.MouseUp += new MouseEventHandler(_MouseUp);
        this.MouseMove += new MouseEventHandler(_MouseMove);

但是当我在表单中实现此按钮并设置Click Event时,每次用户单击按钮,它都会运行Click Event 2次,在我的情况下,2记录已插入数据库。我不知道我错过了什么,你能帮忙吗?非常感谢

4 个答案:

答案 0 :(得分:0)

这是因为当您单击鼠标时,会释放鼠标按下,然后在您释放单击时启动鼠标。

答案 1 :(得分:0)

任何控件的MouseDown事件都会在您单击控件后立即触发,无论是右键单击还是左键单击。如果使用{{1}等事件,您可以定位特定的moue按钮}

MouseLeftButtonDown事件从MouseUp释放控件时触发,或者我应该说鼠标点击。问题是你调用相同的方法/功能(不知道是什么{{1}在MouseDownInvalidate事件中,我希望你能理解这个问题:)

答案 2 :(得分:0)

没有任何额外的代码,我的猜测是你从具有自己的鼠标事件的按钮继承而你正在添加自己的代码,因此两者都被触发了。你的MouseDown和基类MouseDown。您需要覆盖本机事件而不是添加它们。使用受保护的覆盖MouseDown()来覆盖它们并添加您的附加代码

答案 3 :(得分:0)

非常感谢大家的好答案,但是通过简单的代码添加到_MouseDown事件我的问题就被炸毁了

private void _MouseDown(object sender, MouseEventArgs mevent)
    {
        MState = MouseState.Down;
        (sender as Button).Enabled = false;
        (sender as Button).Enabled = true;
        (sender as Button).Refresh();
        Invalidate();
    }