📄 glassbutton.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using PushButtonState = System.Windows.Forms.VisualStyles.PushButtonState;
namespace Glass
{
/// <summary>
/// Represents a glass button control.
/// </summary>
[ToolboxBitmap(typeof(GlassButton)), ToolboxItem(true), ToolboxItemFilter("System.Windows.Forms"), Description("Raises an event when the user clicks it.")]
public partial class GlassButton : Button
{
#region " Constructors "
/// <summary>
/// Initializes a new instance of the <see cref="Glass.GlassButton" /> class.
/// </summary>
public GlassButton()
{
InitializeComponent();
timer.Interval = animationLength / framesCount;
base.BackColor = Color.Transparent;
BackColor = Color.Black;
ForeColor = Color.White;
OuterBorderColor = Color.White;
InnerBorderColor = Color.Black;
ShineColor = Color.White;
GlowColor = Color.FromArgb(-7488001);//unchecked((int)(0xFF8DBDFF)));
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint, true);
SetStyle(ControlStyles.Opaque, false);
}
#endregion
#region " Fields and Properties "
private Color _backColor;
/// <summary>
/// Gets or sets the background color of the control.
/// </summary>
/// <returns>A <see cref="T:System.Drawing.Color" /> value representing the background color.</returns>
[DefaultValue(typeof(Color), "Black")]
public virtual new Color BackColor
{
get { return _backColor; }
set
{
if (!_backColor.Equals(value))
{
_backColor = value;
UseVisualStyleBackColor = false;
CreateFrames();
OnBackColorChanged(EventArgs.Empty);
}
}
}
/// <summary>
/// Gets or sets the foreground color of the control.
/// </summary>
/// <returns>The foreground <see cref="T:System.Drawing.Color" /> of the control.</returns>
[DefaultValue(typeof(Color), "White")]
public virtual new Color ForeColor
{
get { return base.ForeColor; }
set
{
base.ForeColor = value;
}
}
private Color _innerBorderColor;
/// <summary>
/// Gets or sets the inner border color of the control.
/// </summary>
/// <returns>A <see cref="T:System.Drawing.Color" /> value representing the color of the inner border.</returns>
[DefaultValue(typeof(Color), "Black"), Category("Appearance"), Description("The inner border color of the control.")]
public virtual Color InnerBorderColor
{
get { return _innerBorderColor; }
set
{
if (_innerBorderColor != value)
{
_innerBorderColor = value;
CreateFrames();
if (IsHandleCreated)
{
Invalidate();
}
OnInnerBorderColorChanged(EventArgs.Empty);
}
}
}
private Color _outerBorderColor;
/// <summary>
/// Gets or sets the outer border color of the control.
/// </summary>
/// <returns>A <see cref="T:System.Drawing.Color" /> value representing the color of the outer border.</returns>
[DefaultValue(typeof(Color), "White"), Category("Appearance"), Description("The outer border color of the control.")]
public virtual Color OuterBorderColor
{
get { return _outerBorderColor; }
set
{
if (_outerBorderColor != value)
{
_outerBorderColor = value;
CreateFrames();
if (IsHandleCreated)
{
Invalidate();
}
OnOuterBorderColorChanged(EventArgs.Empty);
}
}
}
private Color _shineColor;
/// <summary>
/// Gets or sets the shine color of the control.
/// </summary>
/// <returns>A <see cref="T:System.Drawing.Color" /> value representing the shine color.</returns>
[DefaultValue(typeof(Color), "White"), Category("Appearance"), Description("The shine color of the control.")]
public virtual Color ShineColor
{
get { return _shineColor; }
set
{
if (_shineColor != value)
{
_shineColor = value;
CreateFrames();
if (IsHandleCreated)
{
Invalidate();
}
OnShineColorChanged(EventArgs.Empty);
}
}
}
private Color _glowColor;
/// <summary>
/// Gets or sets the glow color of the control.
/// </summary>
/// <returns>A <see cref="T:System.Drawing.Color" /> value representing the glow color.</returns>
[DefaultValue(typeof(Color), "255,141,189,255"), Category("Appearance"), Description("The glow color of the control.")]
public virtual Color GlowColor
{
get { return _glowColor; }
set
{
if (_glowColor != value)
{
_glowColor = value;
CreateFrames();
if (IsHandleCreated)
{
Invalidate();
}
OnGlowColorChanged(EventArgs.Empty);
}
}
}
private bool _fadeOnFocus;
/// <summary>
/// Gets or sets a value indicating whether the button should fade in and fade out when it's getting and loosing the focus.
/// </summary>
/// <value><c>true</c> if fading with changing the focus; otherwise, <c>false</c>.</value>
[DefaultValue(false), Category("Appearance"), Description("Indicates whether the button should fade in and fade out when it is getting and loosing the focus.")]
public virtual bool FadeOnFocus
{
get { return _fadeOnFocus; }
set
{
if (_fadeOnFocus != value)
{
_fadeOnFocus = value;
}
}
}
private bool _isHovered;
private bool _isFocused;
private bool _isFocusedByKey;
private bool _isKeyDown;
private bool _isMouseDown;
private bool IsPressed { get { return _isKeyDown || (_isMouseDown && _isHovered); } }
/// <summary>
/// Gets the state of the button control.
/// </summary>
/// <value>The state of the button control.</value>
[Browsable(false)]
public PushButtonState State
{
get
{
if (!Enabled)
{
return PushButtonState.Disabled;
}
if (IsPressed)
{
return PushButtonState.Pressed;
}
if (_isHovered)
{
return PushButtonState.Hot;
}
if (_isFocused || IsDefault)
{
return PushButtonState.Default;
}
return PushButtonState.Normal;
}
}
#endregion
#region " Events "
/// <summary>Occurs when the value of the <see cref="P:Glass.GlassButton.InnerBorderColor" /> property changes.</summary>
[Description("Event raised when the value of the InnerBorderColor property is changed."), Category("Property Changed")]
public event EventHandler InnerBorderColorChanged;
/// <summary>
/// Raises the <see cref="E:Glass.GlassButton.InnerBorderColorChanged" /> event.
/// </summary>
/// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param>
protected virtual void OnInnerBorderColorChanged(EventArgs e)
{
if (InnerBorderColorChanged != null)
{
InnerBorderColorChanged(this, e);
}
}
/// <summary>Occurs when the value of the <see cref="P:Glass.GlassButton.OuterBorderColor" /> property changes.</summary>
[Description("Event raised when the value of the OuterBorderColor property is changed."), Category("Property Changed")]
public event EventHandler OuterBorderColorChanged;
/// <summary>
/// Raises the <see cref="E:Glass.GlassButton.OuterBorderColorChanged" /> event.
/// </summary>
/// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param>
protected virtual void OnOuterBorderColorChanged(EventArgs e)
{
if (OuterBorderColorChanged != null)
{
OuterBorderColorChanged(this, e);
}
}
/// <summary>Occurs when the value of the <see cref="P:Glass.GlassButton.ShineColor" /> property changes.</summary>
[Description("Event raised when the value of the ShineColor property is changed."), Category("Property Changed")]
public event EventHandler ShineColorChanged;
/// <summary>
/// Raises the <see cref="E:Glass.GlassButton.ShineColorChanged" /> event.
/// </summary>
/// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param>
protected virtual void OnShineColorChanged(EventArgs e)
{
if (ShineColorChanged != null)
{
ShineColorChanged(this, e);
}
}
/// <summary>Occurs when the value of the <see cref="P:Glass.GlassButton.GlowColor" /> property changes.</summary>
[Description("Event raised when the value of the GlowColor property is changed."), Category("Property Changed")]
public event EventHandler GlowColorChanged;
/// <summary>
/// Raises the <see cref="E:Glass.GlassButton.GlowColorChanged" /> event.
/// </summary>
/// <param name="e">An <see cref="T:System.EventArgs" /> that contains the event data.</param>
protected virtual void OnGlowColorChanged(EventArgs e)
{
if (GlowColorChanged != null)
{
GlowColorChanged(this, e);
}
}
#endregion
#region " Overrided Methods "
/// <summary>
/// Raises the <see cref="E:System.Windows.Forms.Control.SizeChanged" /> event.
/// </summary>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -