Я создал пользовательскую кнопку в 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 формы?