Кнопка не меняет цвет после нажатия другой кнопки - PullRequest
0 голосов
/ 05 января 2019

Я хочу сделать это там, где моя кнопка нажата, она покажет, какая кнопка была выбрана. Тем не менее, я хочу, чтобы он исчез после того, как я сделал новый выбор на кнопке. Я сделал пользовательскую кнопку (код ниже). Когда я нажимаю на кнопку, кнопка немедленно меняет цвет, но когда я нажимаю на вторую кнопку, она не меняет цвет фона обратно на исходный цвет.

Кнопка:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;

namespace InformationBookFinal.User_Control
{
public class FlatButton : Button
{
    public FlatButton()
    {
        BackColor = Color.DodgerBlue;
        ForeColor = Color.White;
        CurrentBackColor = BackColor;
    }

    private Color CurrentBackColor;

    private Color onHoverBackColor = Color.DarkOrchid;
    public Color OnHoverBackColor
    {
        get { return onHoverBackColor; }
        set { onHoverBackColor = value; Invalidate(); }
    }

    protected override void OnMouseEnter(EventArgs e)
    {
        base.OnMouseEnter(e);
        CurrentBackColor = onHoverBackColor;
        Invalidate();
    }

    protected override void OnMouseLeave(EventArgs e)
    {
        base.OnMouseLeave(e);
        CurrentBackColor = BackColor;
        Invalidate();
    }

    protected override void OnMouseDown(MouseEventArgs mevent)
    {
        base.OnMouseDown(mevent);
        CurrentBackColor = Color.RoyalBlue;
        Invalidate();
    }

    protected override void OnMouseUp(MouseEventArgs mevent)
    {
        base.OnMouseUp(mevent);
        CurrentBackColor = BackColor;
        Invalidate();
    }

    protected override void OnPaint(PaintEventArgs pevent)
    {
        base.OnPaint(pevent);
        pevent.Graphics.FillRectangle(new SolidBrush(CurrentBackColor), 0, 0, Width, Height);
        TextFormatFlags flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter;
        TextRenderer.DrawText(pevent.Graphics, Text, Font, new Point(Width + 3, Height / 2), ForeColor, flags);
    }
  }
}

Кнопка Действие:

    private void flatButton2_Click(object sender, EventArgs e)
    {
        flatButton1.BackColor = Color.DodgerBlue;
        flatButton1.Hide();
        flatButton1.Show();

    }

    private void flatButton1_Click(object sender, EventArgs e)
    {
        flatButton1.BackColor = Color.Pink;
    }

1 Ответ

0 голосов
/ 05 января 2019

Когда вы устанавливаете значение BackColor, вы не обновляете значение CurrentBackColor, которое вы используете в методе Paint.

Поэтому попробуйте переопределить это свойство:

public override Color BackColor {
  get {
    return base.BackColor;
  }
  set {
    base.BackColor = value;
    CurrentBackColor = value;
    this.Invalidate();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...