且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

模拟点击与键盘在Windows窗体

更新时间:2023-12-06 12:50:34

最后我实现了按钮更改背景:

Finally I implemented the button changing the background:

class FunctionButton : Button
{
    private Color m_colorOver;
    private bool m_isPressed;

    public FunctionButton() : base()
    {
        m_isPressed = false;
    }

    protected override void OnGotFocus(EventArgs e)
    {
        OnMouseEnter(null);
        base.OnGotFocus(e);
    }

    protected override void OnLostFocus(EventArgs e)
    {
        if (!m_isPressed)
        {
            OnMouseLeave(null);
        }

        base.OnLostFocus(e);
    }

    protected override void OnMouseLeave(EventArgs e)
    {
        if (!Focused && !m_isPressed)
        {
            base.OnMouseLeave(e);
        }
    }

    public void FunctionKeyPressed()
    {
        // Handle just the first event
        if (!m_isPressed)
        {
            m_isPressed = true;
            m_colorOver = FlatAppearance.MouseOverBackColor;
            FlatAppearance.MouseOverBackColor = FlatAppearance.MouseDownBackColor;

            OnMouseEnter(null);
            PerformClick();    
        }
    }

    public void FunctionKeyReleased()
    {
        m_isPressed = false;
        FlatAppearance.MouseOverBackColor = m_colorOver;

        if (Focused)
        {
            OnMouseEnter(null);
        }
        else
        {
            base.OnMouseLeave(null);
        }
    }
}



这不是最干净的方式,但它工作正常。我想更多的例子有更清洁,更优雅的风格这样做。

It is not the most clean way but it works fine. I would like more examples doing this with a cleaner and more elegant style.