using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Rs.Controls { public enum EButtonType { None, Main, Data, Recipe, System, About, Permission, Language, Quit, Calib } public class ButtonEx : Button { public EButtonType ButtonType { get; set; } = EButtonType.None; private bool selected = false; /// /// 被选中 /// public bool Selected { get { return selected; } set { selected = value; if (selected) { this.BackColor = SelectedColor; //this.FlatAppearance.BorderColor = Color.Red; } else { //this.FlatAppearance.BorderColor = Color.White; this.BackColor = UnSelectedColor; } Invalidate(); } } public Color SelectedColor { get; set; } = Color.FromArgb(57, 136, 203); public Color UnSelectedColor { get; set; } = Color.FromArgb(19, 52, 104); public string ShowText { get; set; } public string ShowIcon { get; set; } protected override void OnPaint(PaintEventArgs pevent) { string text = this.Text; this.Text = ""; base.OnPaint(pevent); FontFamily ff = IconFontHelper.PFCC.Families[0]; SizeF textSize = pevent.Graphics.MeasureString(this.Text, this.Font); string str = ""; Font font = new Font(ff, 30); switch (ButtonType) { case EButtonType.None: break; case EButtonType.Main: str = " \ue648"; break; case EButtonType.Data: str = " \ue93a"; break; case EButtonType.Recipe: str = " \ue682"; break; case EButtonType.System: str = " \ue630"; break; case EButtonType.About: str = " \ue603"; break; case EButtonType.Permission: str = " \ue66d"; break; case EButtonType.Language: str = " \ue654"; break; case EButtonType.Quit: str = " \ue67d"; break; case EButtonType.Calib: str = "\uec31"; break; default: break; } SizeF size = pevent.Graphics.MeasureString(str, font); StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; RectangleF rect = new RectangleF(0, 0, ClientRectangle.Width, ClientRectangle.Height); pevent.Graphics.DrawString(ShowText, this.Font, new SolidBrush(this.ForeColor), rect, sf); sf.Alignment = StringAlignment.Near; pevent.Graphics.DrawString(str, font, new SolidBrush(ForeColor), rect, sf); //if(selected) //{ // LinearGradientBrush br = new LinearGradientBrush(this.ClientRectangle, Color.Black, Color.Black, 0, false); // ColorBlend cb = new ColorBlend(); // cb.Positions = new[] { 0, 0.5f, 1.0f }; // cb.Colors = new[] { Color.FromArgb(18, 53, 106), Color.FromArgb(67, 158, 229), Color.FromArgb(18, 53, 106) }; // br.InterpolationColors = cb; // br.RotateTransform(180); // pevent.Graphics.FillRectangle(br, this.ClientRectangle); // } } } }