📄 usercontrol1.cs
字号:
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
namespace WindowsControlLibrary1
{
/// <summary>
/// UserControl1 的摘要说明。
/// </summary>
public partial class UserControl1 : Button
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
//private System.ComponentModel.Container components = null;
private bool XiaCen = false;
private bool mouseMove = false;
private Color backColor;
public UserControl1()
{
// 该调用是 Windows.Forms 窗体设计器所必需的。
InitializeComponent();
// TODO: 在 InitComponent 调用后添加任何初始化
backColor = this.backColor;
//this.Text=this.ShowFocusCues.ToString();
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
public override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
components.Dispose();
}
base.Dispose(disposing);
}
protected GraphicsPath GetGraphicsPath(Rectangle rect)
{
GraphicsPath ClientPath = new System.Drawing.Drawing2D.GraphicsPath();
if (rect.Width <= 0)
{
rect.Width = 1;
}
if (rect.Height <= 0)
{
rect.Height = 1;
}
ClientPath.AddArc(rect.Left, rect.Top, rect.Height, rect.Height, 90f, 180f);
ClientPath.AddArc(rect.Right - rect.Height, rect.Top, rect.Height, rect.Height, 270f, 180f);
ClientPath.CloseFigure();
return ClientPath;
}
protected GraphicsPath GetGraphicsPath1(Rectangle rect)
{
GraphicsPath ClientPath = new System.Drawing.Drawing2D.GraphicsPath();
if (rect.Width <= 0)
{
rect.Width = 1;
}
if (rect.Height <= 0)
{
rect.Height = 1;
}
ClientPath.AddArc(rect.Left, rect.Top, rect.Height, rect.Height, 190f, 80f);
ClientPath.AddArc(rect.Right - rect.Height, rect.Top, rect.Height, rect.Height, 270f, 80f);
ClientPath.CloseFigure();
return ClientPath;
}
private void DrawYinYing(Graphics gr, bool xiacen)
{
Rectangle rect = this.ClientRectangle;
rect.Inflate(-(rect.Width / 10), -(rect.Height) / 4);
float bf1 = rect.Width / 100f;
float bf2 = rect.Height / 100f;
rect.Y = rect.Y + this.ClientRectangle.Height / 4;
if (xiacen)
{
rect.Y = rect.Y + 4;
}
GraphicsPath path;
for (int a = 1; a < 33; a++)
{
float bf3 = bf1 * a;
float bf4 = bf2 * a;
Rectangle rect1 = rect;
rect1.Inflate(-(int)bf3, -(int)bf4);
path = GetGraphicsPath(rect1);
int r = backColor.R;
int g = backColor.G;
int b = backColor.B;
r = r + 3 * a;
g = g + 3 * a;
b = b + 3 * a;
if (r > 255) r = 255;
if (g > 255) g = 255;
if (b > 255) b = 255;
gr.FillPath(new SolidBrush(Color.FromArgb(r, g, b)), path);
}
}
private void DrawGaoLiang(Graphics g, bool xiacen)
{
Rectangle rect = this.ClientRectangle;
rect.Inflate(-4, -4);
if (xiacen)
{
rect.Y = rect.Y + 4;
}
GraphicsPath path = GetGraphicsPath1(rect);
RectangleF rect1 = path.GetBounds();
rect1.Height = rect1.Height + 1;
g.FillPath(new LinearGradientBrush(rect1,
Color.FromArgb(0xff, 0xff, 0xff, 0xff),
Color.FromArgb(0xff, backColor), LinearGradientMode.Vertical), path);
}
private void DrawText(Graphics g, bool xiacen)
{
Rectangle rect = this.ClientRectangle;
Rectangle rect1 = this.ClientRectangle;
StringFormat stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;
rect.Y = this.ClientRectangle.Height / 5;
if (xiacen)
{
rect.Y = rect.Y + 4;
rect1.Y = rect1.Y + 4;
}
Font font = this.Font;
if (mouseMove)
{
font = new Font(this.Font, FontStyle.Underline);
}
g.DrawString(this.Text, font,
new SolidBrush(Color.FromArgb(0x66, backColor)), rect, stringFormat);
g.DrawString(this.Text, font, new SolidBrush(this.ForeColor), rect1, stringFormat);
}
private void UserControl1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (XiaCen == false)
{
XiaCen = true;
this.Refresh();
}
}
private void UserControl1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (XiaCen == true)
{
XiaCen = false;
this.Refresh();
}
}
private void UserControl1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.FillRectangle(new SolidBrush(backColor), 0, 0, this.Width, this.Height);
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
e.Graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
Rectangle rect = new Rectangle(0, 0, this.Width, this.Height);
GraphicsPath ClientPath = GetGraphicsPath(rect);
e.Graphics.FillPath(new SolidBrush(backColor), ClientPath);
this.Region = new System.Drawing.Region(ClientPath);
DrawYinYing(e.Graphics, XiaCen);
DrawGaoLiang(e.Graphics, XiaCen);
DrawText(e.Graphics, XiaCen);
if (this.Focused)
{
e.Graphics.DrawPath(new Pen(Color.FromArgb(0x22, 0xff, 0xff, 0xff), 3), ClientPath);
}
}
private void UserControl1_BackColorChanged(object sender, System.EventArgs e)
{
int r = BackColor.R;
int g = BackColor.G;
int b = BackColor.B;
r = r + 0x22;
g = g + 0x22;
b = b + 0x22;
if (r > 255) r = 255;
if (g > 255) g = 255;
if (b > 255) b = 255;
backColor = Color.FromArgb(r, g, b);
}
private void UserControl1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (XiaCen == false && e.KeyCode == Keys.Space)
{
XiaCen = true;
this.Refresh();
}
}
private void UserControl1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (XiaCen == true && e.KeyCode == Keys.Space)
{
XiaCen = false;
this.Refresh();
}
}
private void UserControl1_MouseEnter(object sender, System.EventArgs e)
{
if (mouseMove == false)
{
mouseMove = true;
this.Refresh();
}
}
private void UserControl1_MouseLeave(object sender, System.EventArgs e)
{
if (mouseMove == true)
{
mouseMove = false;
this.Refresh();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -