110,536
社区成员
发帖
与我相关
我的任务
分享
public enum ButtonType
{
/// <summary>
/// 最小化
/// </summary>
Minimize,
/// <summary>
/// 最大化
/// </summary>
Maximization,
/// <summary>
/// 关闭
/// </summary>
Close,
/// <summary>
/// 还原
/// </summary>
Restore
}
/// <summary>
/// 按钮状态
/// </summary>
public enum ButtonState
{
/// <summary>
/// 正常
/// </summary>
None,
/// <summary>
/// 鼠标滑过
/// </summary>
Hover,
/// <summary>
/// 按下
/// </summary>
Down
}
public class ToolsButton : Button
{
#region 私有字段
private Image backImg;
private Image hoverImg;
private Image clickImg;
private ButtonType type;
private ButtonState state = ButtonState.None;
#endregion
#region 公有属性
/// <summary>
///
/// </summary>
public Image BackImg
{
get { return backImg; }
set { backImg = value; }
}
/// <summary>
///
/// </summary>
public Image HoverImg
{
get { return hoverImg; }
set { hoverImg = value; }
}
/// <summary>
///
/// </summary>
public Image ClickImg
{
get { return clickImg; }
set { clickImg = value; }
}
/// <summary>
/// 按钮类型
/// </summary>
public ButtonType Type
{
get { return type; }
set { type = value; }
}
/// <summary>
/// 按钮状态
/// </summary>
public ButtonState State
{
get { return state; }
set { state = value; }
}
#endregion
#region 构造函数
public ToolsButton()
{
//默认构造函数
InitializeComponent();
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="bType">按钮类型</param>
/// <param name="width">宽度</param>
/// <param name="height">高度</param>
/// <param name="location">坐标</param>
public ToolsButton(ButtonType bType, Point location)
{
type = bType;
Location = location;
FlatAppearance.BorderSize = 0;
FlatStyle = FlatStyle.Flat;
Anchor = AnchorStyles.Top | AnchorStyles.Right;
switch (type)
{
case ButtonType.Minimize:
Width = 30;
Height = 22;
backImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Min.png");
hoverImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Min_OnHover.png");
clickImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Min_OnClick.png");
break;
case ButtonType.Maximization:
Width = 30;
Height = 22;
backImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Max.png");
hoverImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Max_OnHover.png");
clickImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Max_OnClick.png");
break;
case ButtonType.Close:
Width = 40;
Height = 22;
backImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Close.png");
hoverImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Close_OnHover.png");
clickImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Close_OnClick.png");
break;
case ButtonType.Restore:
Width = 30;
Height = 22;
backImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Restore.png");
hoverImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Restore_OnHover.png");
clickImg = Image.FromFile(Application.StartupPath + "\\Resource\\Image\\Restore_OnClick.png");
break;
default:
break;
}
InitializeComponent();
}
#endregion
#region 方法
private void InitializeComponent()
{
this.SuspendLayout();
//
// ToolsButton
//
this.Paint += new System.Windows.Forms.PaintEventHandler(this.CloseButton_Paint);
this.ResumeLayout(false);
}
private void CloseButton_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
//g.DrawImage(, 0, 0);
g.DrawImage(GetImage(),
new Rectangle(0, 0, Width, Height),
new Rectangle(0, 0, GetImage().Size.Width, GetImage().Size.Height),
GraphicsUnit.Pixel);
}
private Image GetImage()
{
Image img = backImg;
switch (state)
{
case ButtonState.None:
img = backImg;
break;
case ButtonState.Hover:
img = hoverImg;
break;
case ButtonState.Down:
img = clickImg;
break;
}
return img;
}
#endregion
#region 事件
protected override void OnMouseDown(MouseEventArgs mevent)
{
this.State = ButtonState.Down;
this.InitializeComponent();
base.OnMouseDown(mevent);
}
protected override void OnMouseHover(EventArgs e)
{
this.State = ButtonState.Hover;
this.InitializeComponent();
base.OnMouseHover(e);
}
protected override void OnMouseLeave(EventArgs e)
{
this.State = ButtonState.None;
this.InitializeComponent();
base.OnMouseLeave(e);
}
protected override void OnMouseUp(MouseEventArgs mevent)
{
this.State = ButtonState.Hover;
this.InitializeComponent();
base.OnMouseUp(mevent);
}
#endregion
}
public ButtonState State
{
get { return state; }
set
{
if((ButtonState)value!=state)
{
state = value;
this.Invalidate();
}
}
}
这样写比较好些吧?
protected override void OnMouseHover(EventArgs e)
{
this.State = ButtonState.Hover;
//this.InitializeComponent();
//把this.InitializeComponent(); 换成this.Invalidate();
base.OnMouseHover(e);
}