【发布时间】:2019-01-05 06:28:24
【问题描述】:
我想在我的按钮被按下的地方显示它会显示哪个按钮被选中。但是,我希望它在我对按钮进行新选择后消失。我制作了一个自定义按钮(下面的代码)。当我单击按钮时,按钮会立即更改颜色,但是当我单击第二个按钮时,它不会将背景颜色更改回原始颜色。
按钮:
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;
}
【问题讨论】:
-
因为 CurrentBackColor 永远不会得到更新。
-
它应该虽然不应该因为
CurrentBackColor = BackColor一块?
标签: c# visual-studio winforms