You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
337 lines
9.7 KiB
C#
337 lines
9.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.Drawing.Drawing2D;
|
|
|
|
namespace HslCommunication.Controls
|
|
{
|
|
/// <summary>
|
|
/// 一个自定义的按钮控件
|
|
/// </summary>
|
|
[DefaultEvent("Click")]
|
|
public partial class UserButton : UserControl
|
|
{
|
|
/// <summary>
|
|
/// 实例化一个按钮对象
|
|
/// </summary>
|
|
public UserButton()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void UserButton_Load(object sender, EventArgs e)
|
|
{
|
|
sf = new StringFormat();
|
|
sf.Alignment = StringAlignment.Center;
|
|
sf.LineAlignment = StringAlignment.Center;
|
|
|
|
SizeChanged += UserButton_SizeChanged;
|
|
Font = new Font("微软雅黑", Font.Size, Font.Style);
|
|
MouseEnter += UserButton_MouseEnter;
|
|
MouseLeave += UserButton_MouseLeave;
|
|
|
|
MouseDown += UserButton_MouseDown;
|
|
MouseUp += UserButton_MouseUp;
|
|
|
|
SetStyle(ControlStyles.ResizeRedraw, true);
|
|
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
|
|
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
|
|
}
|
|
|
|
private void UserButton_SizeChanged(object sender, EventArgs e)
|
|
{
|
|
if (Width > 1)
|
|
{
|
|
Invalidate();
|
|
}
|
|
}
|
|
|
|
private int RoundCorner = 3;
|
|
private StringFormat sf = null;
|
|
private string _text = "button";
|
|
/// <summary>
|
|
/// 设置或获取显示的文本
|
|
/// </summary>
|
|
[Category("外观")]
|
|
[DefaultValue("button")]
|
|
[Description("用来设置显示的文本信息")]
|
|
public string UIText
|
|
{
|
|
get { return _text; }
|
|
set { _text = value; Invalidate(); }
|
|
}
|
|
/// <summary>
|
|
/// 设置或获取显示文本的颜色
|
|
/// </summary>
|
|
[Category("外观")]
|
|
[DefaultValue(typeof(Color), "Black")]
|
|
[Description("用来设置显示的文本的颜色")]
|
|
public Color TextColor { get; set; } = Color.Black;
|
|
|
|
/// <summary>
|
|
/// 设置按钮的圆角
|
|
/// </summary>
|
|
[Category("外观")]
|
|
[DefaultValue(3)]
|
|
[Description("按钮框的圆角属性")]
|
|
public int CornerRadius
|
|
{
|
|
get { return RoundCorner; }
|
|
set { RoundCorner = value; Invalidate(); }
|
|
}
|
|
|
|
private bool m_Selected = false;
|
|
/// <summary>
|
|
/// 用来设置按钮的选中状态
|
|
/// </summary>
|
|
[Category("外观")]
|
|
[DefaultValue(false)]
|
|
[Description("指示按钮的选中状态")]
|
|
public bool Selected
|
|
{
|
|
get { return m_Selected; }
|
|
set { m_Selected = value; Invalidate(); }
|
|
}
|
|
/// <summary>
|
|
/// 已经弃用
|
|
/// </summary>
|
|
[Browsable(false)]
|
|
public override Color ForeColor
|
|
{
|
|
get { return base.ForeColor; }
|
|
set { base.ForeColor = value; }
|
|
}
|
|
/// <summary>
|
|
/// 已经弃用
|
|
/// </summary>
|
|
[Browsable(false)]
|
|
public override string Text
|
|
{
|
|
get { return base.Text; }
|
|
set { base.Text = value; }
|
|
}
|
|
|
|
private Color m_backcor = Color.Lavender;
|
|
/// <summary>
|
|
/// 按钮的背景色
|
|
/// </summary>
|
|
[Category("外观")]
|
|
[DefaultValue(typeof(Color), "Lavender")]
|
|
[Description("按钮的背景色")]
|
|
public Color OriginalColor
|
|
{
|
|
get{return m_backcor; }
|
|
set{m_backcor = value;Invalidate(); }
|
|
}
|
|
|
|
private Color m_enablecolor = Color.FromArgb(190, 190, 190);
|
|
/// <summary>
|
|
/// 按钮的背景色
|
|
/// </summary>
|
|
[Category("外观")]
|
|
[Description("按钮的活动色")]
|
|
public Color EnableColor
|
|
{
|
|
get { return m_enablecolor; }
|
|
set { m_enablecolor = value; Invalidate(); }
|
|
}
|
|
|
|
|
|
|
|
private Color m_active = Color.AliceBlue;
|
|
/// <summary>
|
|
/// 鼠标挪动时的活动颜色
|
|
/// </summary>
|
|
[Category("外观")]
|
|
[DefaultValue(typeof(Color), "AliceBlue")]
|
|
[Description("按钮的活动色")]
|
|
public Color ActiveColor
|
|
{
|
|
get { return m_active; }
|
|
set { m_active = value; Invalidate(); }
|
|
}
|
|
|
|
private bool m_BorderVisiable = true;
|
|
/// <summary>
|
|
/// 设置按钮的边框是否可见
|
|
/// </summary>
|
|
[Category("外观")]
|
|
[Browsable(true)]
|
|
[DefaultValue(true)]
|
|
[Description("指示按钮是否存在边框")]
|
|
public bool BorderVisiable
|
|
{
|
|
get { return m_BorderVisiable; }
|
|
set { m_BorderVisiable = value; Invalidate(); }
|
|
}
|
|
/// <summary>
|
|
/// 存放用户需要保存的一些额外的信息
|
|
/// </summary>
|
|
[Browsable(false)]
|
|
public string CustomerInformation { get; set; } = "";
|
|
|
|
|
|
#region 光标移动块
|
|
private bool is_mouse_on { get; set; } = false;
|
|
|
|
|
|
private void UserButton_MouseLeave(object sender, EventArgs e)
|
|
{
|
|
is_mouse_on = false;
|
|
Invalidate();
|
|
}
|
|
|
|
private void UserButton_MouseEnter(object sender, EventArgs e)
|
|
{
|
|
is_mouse_on = true;
|
|
Invalidate();
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
#region 鼠标点击块
|
|
|
|
private bool is_left_mouse_down { get; set; } = false;
|
|
private void UserButton_MouseUp(object sender, MouseEventArgs e)
|
|
{
|
|
if (e.Button == MouseButtons.Left)
|
|
{
|
|
is_left_mouse_down = false;
|
|
Invalidate();
|
|
}
|
|
}
|
|
|
|
private void UserButton_MouseDown(object sender, MouseEventArgs e)
|
|
{
|
|
if (e.Button == MouseButtons.Left)
|
|
{
|
|
is_left_mouse_down = true;
|
|
Invalidate();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 触发一次点击的事件
|
|
/// </summary>
|
|
public void PerformClick()
|
|
{
|
|
OnClick(new EventArgs());
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 重绘数据区
|
|
/// </summary>
|
|
/// <param name="e"></param>
|
|
protected override void OnPaint(PaintEventArgs e)
|
|
{
|
|
if (!Authorization.nzugaydgwadawdibbas( )) return;
|
|
|
|
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
|
|
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
|
|
|
|
|
|
|
|
GraphicsPath path = new GraphicsPath();
|
|
path.AddLine(RoundCorner, 0, Width - RoundCorner - 1, 0);
|
|
path.AddArc(Width - RoundCorner * 2 - 1, 0, RoundCorner * 2, RoundCorner * 2, 270f, 90f);
|
|
path.AddLine(Width - 1, RoundCorner, Width - 1, Height - RoundCorner - 1);
|
|
path.AddArc(Width - RoundCorner * 2 - 1, Height - RoundCorner * 2 - 1, RoundCorner * 2, RoundCorner * 2, 0f, 90f);
|
|
path.AddLine(Width - RoundCorner - 1, Height - 1, RoundCorner, Height - 1);
|
|
path.AddArc(0, Height - RoundCorner * 2 - 1, RoundCorner * 2, RoundCorner * 2, 90f, 90f);
|
|
path.AddLine(0, Height - RoundCorner - 1, 0, RoundCorner);
|
|
path.AddArc(0, 0, RoundCorner * 2, RoundCorner * 2, 180f, 90f);
|
|
|
|
|
|
Brush brush_fore_text = null;
|
|
Brush brush_back_text = null;
|
|
Rectangle rect_text = new Rectangle(ClientRectangle.X, ClientRectangle.Y,
|
|
ClientRectangle.Width, ClientRectangle.Height);
|
|
if (Enabled)
|
|
{
|
|
brush_fore_text = new SolidBrush(TextColor);
|
|
if(Selected)
|
|
{
|
|
brush_back_text = new SolidBrush(Color.DodgerBlue);
|
|
}
|
|
else if (is_mouse_on)
|
|
{
|
|
brush_back_text = new SolidBrush(ActiveColor);
|
|
}
|
|
else
|
|
{
|
|
brush_back_text = new SolidBrush(OriginalColor);
|
|
}
|
|
if (is_left_mouse_down)
|
|
{
|
|
rect_text.Offset(1, 1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
brush_fore_text = new SolidBrush(Color.Gray);
|
|
brush_back_text = new SolidBrush(EnableColor);
|
|
}
|
|
|
|
e.Graphics.FillPath(brush_back_text, path);
|
|
Pen pen_border = new Pen(Color.FromArgb(170, 170, 170));
|
|
if (BorderVisiable)
|
|
{
|
|
e.Graphics.DrawPath(pen_border, path);
|
|
}
|
|
e.Graphics.DrawString(UIText, Font, brush_fore_text, rect_text, sf);
|
|
|
|
|
|
//base.OnPaint(e);
|
|
brush_fore_text.Dispose();
|
|
brush_back_text.Dispose();
|
|
pen_border.Dispose();
|
|
path.Dispose();
|
|
}
|
|
|
|
private void UserButton_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.Enter)
|
|
{
|
|
OnClick(new EventArgs());
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 点击按钮的触发事件
|
|
/// </summary>
|
|
/// <param name="e"></param>
|
|
protected override void OnClick(EventArgs e)
|
|
{
|
|
if (Enabled)
|
|
{
|
|
base.OnClick(e);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 点击的时候触发事件
|
|
/// </summary>
|
|
/// <param name="e"></param>
|
|
protected override void OnMouseClick(MouseEventArgs e)
|
|
{
|
|
if (Enabled)
|
|
{
|
|
base.OnMouseClick(e);
|
|
}
|
|
}
|
|
}
|
|
}
|