Переопределенное событие в пользовательском элементе управления выполняется после события формы - PullRequest
0 голосов
/ 31 марта 2020

Я создал пользовательскую кнопку в c # / WinForms, которая, помимо прочего, придает кнопке трехмерное ощущение, изменяя толщину границы кнопки в переопределенных событиях MouseDown и MouseUp, используя следующий код в переопределенном событии OnPaint:

    public int BorderThickness { get; set; } = 3;
    public int ClickBorderThickness { get; set; } = 2;
    private MouseIsDown = false;

    protected override void OnPaint(PaintEventArgs pevent)
    {
        int BorderWidth = (MouseIsDown) ? ClickBorderThickness : BorderThickness;

        ControlPaint.DrawBorder(pevent.Graphics, ClientRectangle,
               SystemColors.ControlLightLight, BorderWidth, ButtonBorderStyle.Outset,
               SystemColors.ControlLightLight, BorderWidth, ButtonBorderStyle.Outset,
               SystemColors.ControlLightLight, BorderWidth, ButtonBorderStyle.Outset,
               SystemColors.ControlLightLight, BorderWidth, ButtonBorderStyle.Outset);

        //...Other Code...
    }

    protected override void OnMouseDown(MouseEventArgs e)
    {
        base.OnMouseDown(e);
        MouseIsDown = true;
        Invalidate();
    }

    protected override void OnMouseUp(MouseEventArgs e)
    {
        base.OnMouseUp(e);
        MouseIsDown = false;
        Invalidate();
    }

Я также создал переопределенное событие OnClick:

    protected override void OnMouseClick(MouseEventArgs e)
    {
        MouseIsDown = false;
        Invalidate();
        base.OnMouseClick(e);
    }

Я думал, что произойдет, что кнопка будет перерисована и go вернется к своему «не щелчковому» виду ранее. выполнить код в событии Click для кнопки в моей форме. Это не то, что произошло, и переопределенное событие было выполнено после того, как ВСЕ код в форме события Click был завершен.

Как бы я изменил свою пользовательскую кнопку для выполнения переопределенного события Click до события Click формы?

1 Ответ

0 голосов
/ 31 марта 2020

Благодаря комментарию Джими, я сделал следующее изменение, которое и помогло:

    protected override void OnMouseUp(MouseEventArgs e)
    {
        MouseIsDown = false;
        Invalidate();
        base.OnMouseUp(e);
    }

(я переместил base.OnMouseUp (e) в конец события OnMouseUp).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...