using System;
|
using System.ComponentModel;
|
using System.Drawing;
|
using System.Windows.Forms;
|
|
namespace DPumpHydr.WinFrmUI.WenSkin.Controls
|
{
|
[Designer(typeof(Design.Designer.WenButtonDesigner))]
|
public partial class WenButton : WenControl
|
{
|
public WenButton() : base()
|
{
|
InitializeComponent();
|
this.Size = new Size(80, 30);
|
}
|
public WenButton(string text) : this()
|
{
|
Text = text;
|
}
|
|
#region 私有属性
|
|
private Color backColor = Color.Transparent;
|
private Image image = null;
|
private Size imageSize = new Size(32, 32);
|
|
#endregion
|
|
#region 公有属性
|
[Category("Wen"), DefaultValue(null)]
|
public Image Image { get => image; set { image = value; this.Invalidate(); } }
|
[Category("Wen")]
|
[DefaultValue(typeof(Size), "32,32")]
|
public Size ImageSize { get => imageSize; set { imageSize = value; this.Invalidate(); } }
|
[Category("Wen")]
|
[DefaultValue(TextImageRelation.ImageBeforeText)]
|
public TextImageRelation TextImageRelation { get; set; } = TextImageRelation.ImageBeforeText;
|
|
public override string Text { get => base.Text; set { base.Text = value; this.Invalidate(); } }
|
|
[Category("Wen"), Description("边框样式"), DefaultValue(WenButtonBorderStyle.None)]
|
public WenButtonBorderStyle BorderStyle { get; set; }
|
#endregion
|
|
protected override void OnPaint(PaintEventArgs e)
|
{
|
base.OnPaint(e);
|
Graphics g = e.Graphics;
|
Rectangle rec = this.ClientRectangle;
|
|
Brush brush = new SolidBrush(this.ForeColor);
|
if (!this.Enabled)
|
brush = new SolidBrush(Color.FromArgb(100, 100, 100));
|
|
Rectangle recimage;
|
Rectangle recString;
|
if (TextImageRelation == TextImageRelation.ImageAboveText)
|
{
|
//图标绘制靠上居中
|
recimage = new Rectangle((this.Width - ImageSize.Width) / 2, 3, ImageSize.Width, ImageSize.Height);
|
recString = new Rectangle(0, 3 + ImageSize.Height, this.Width, this.Height - 3 - ImageSize.Height);
|
if (Image != null)
|
g.DrawImage(Image, recimage);
|
g.DrawString(this.Text, Font, brush, recString, ControlHelper.StringContersCenter);
|
}
|
else if (TextImageRelation == TextImageRelation.Overlay || Image == null)
|
{
|
//图标绘制靠上居中
|
recimage = new Rectangle((this.Width - ImageSize.Width) / 2, (this.Height - ImageSize.Height) / 2, ImageSize.Width, ImageSize.Height);
|
_ = new Rectangle(0, 3 + ImageSize.Height, this.Width, this.Height - 3 - ImageSize.Height);
|
if (Image != null)
|
g.DrawImage(Image, recimage);
|
g.DrawString(this.Text, Font, brush, rec, ControlHelper.StringContersCenter);
|
}
|
else
|
{
|
//其他都是图标坐标文字靠图标
|
recimage = new Rectangle(2, (this.Height - ImageSize.Height) / 2, ImageSize.Width, ImageSize.Height);
|
recString = new Rectangle(2 + ImageSize.Width + 2, 0, this.Width - ImageSize.Width - 6, this.Height);
|
if (Image != null)
|
g.DrawImage(Image, recimage);
|
g.DrawString(this.Text, Font, brush, recString, ControlHelper.StringConters);
|
}
|
|
|
//绘制图框
|
using Pen pen = new Pen(Color.FromArgb(153, 153, 153));
|
switch (BorderStyle)
|
{
|
case WenButtonBorderStyle.Rectangle:
|
g.DrawRectangle(pen, new Rectangle(0, 0, this.Width - 1, this.Height - 1));
|
break;
|
case WenButtonBorderStyle.RoRectangle:
|
System.Drawing.Drawing2D.GraphicsPath path = ControlHelper.CreateRoundedRectanglePath(new Rectangle(0, 0, Width - 1, Height - 1), 10);
|
g.DrawPath(pen, path);
|
break;
|
default:
|
break;
|
}
|
|
|
}
|
protected override void OnMouseLeave(EventArgs e)
|
{
|
base.OnMouseLeave(e);
|
this.BackColor = this.backColor;
|
}
|
protected override void OnMouseEnter(EventArgs e)
|
{
|
base.OnMouseEnter(e);
|
this.backColor = this.BackColor;
|
this.BackColor = Color.FromArgb(63, 63, 65);
|
}
|
protected override void OnClick(EventArgs e)
|
{
|
base.OnClick(e);
|
}
|
|
public enum WenButtonBorderStyle
|
{
|
None,
|
Rectangle,
|
RoRectangle,
|
}
|
}
|
}
|