目录
1.窗体更换皮肤
2.实例
(1)图片资源管理器Resources.Designer.cs设计
(2)Form1.Designer.cs设计
(3)Form1.cs设计
(4) 生成效果
(5)一个遗憾
1.窗体更换皮肤
要在Windows窗体应用程序中更换皮肤,通常需要修改窗体的外观,包括其颜色、字体、鼠标光标和非客户区(如窗口边框、最小化和最大化按钮等)。这可以通过创建一个自定义窗体或使用第三方库来实现。
2.实例
在本实例的自定义窗体中单击鼠标右键,将弹出一个用于更换窗体皮肤的快捷菜单,选择“换皮肤”菜单下的任意子菜单:紫色、蓝色或绿色,程序将为当前窗体更换皮肤。
(1)图片资源管理器Resources.Designer.cs设计
项目之初,先为项目准备好皮肤所需要的图片资源,并把图片设计到Resources.Designer.cs中,具体的设计方法参考本文作者写的其他文章:C#手动改变自制窗体的大小-CSDN博客 https://wenchm.blog.csdn.net/article/details/137027140
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace _187.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("_187.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap background {
get {
object obj = ResourceManager.GetObject("background", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap background1 {
get {
object obj = ResourceManager.GetObject("background1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap background2 {
get {
object obj = ResourceManager.GetObject("background2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap bottom {
get {
object obj = ResourceManager.GetObject("bottom", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap bottom1 {
get {
object obj = ResourceManager.GetObject("bottom1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap bottom2 {
get {
object obj = ResourceManager.GetObject("bottom2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap close {
get {
object obj = ResourceManager.GetObject("close", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap close1 {
get {
object obj = ResourceManager.GetObject("close1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap close2 {
get {
object obj = ResourceManager.GetObject("close2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap left {
get {
object obj = ResourceManager.GetObject("left", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap left1 {
get {
object obj = ResourceManager.GetObject("left1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap left2 {
get {
object obj = ResourceManager.GetObject("left2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap max {
get {
object obj = ResourceManager.GetObject("max", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap max_Normal {
get {
object obj = ResourceManager.GetObject("max_Normal", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap max_normal1 {
get {
object obj = ResourceManager.GetObject("max_normal1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap max_normal2 {
get {
object obj = ResourceManager.GetObject("max_normal2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap max1 {
get {
object obj = ResourceManager.GetObject("max1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap max2 {
get {
object obj = ResourceManager.GetObject("max2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap menu {
get {
object obj = ResourceManager.GetObject("menu", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap menu1 {
get {
object obj = ResourceManager.GetObject("menu1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap menu2 {
get {
object obj = ResourceManager.GetObject("menu2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap min {
get {
object obj = ResourceManager.GetObject("min", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap min1 {
get {
object obj = ResourceManager.GetObject("min1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap min2 {
get {
object obj = ResourceManager.GetObject("min2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap right {
get {
object obj = ResourceManager.GetObject("right", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap right1 {
get {
object obj = ResourceManager.GetObject("right1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap right2 {
get {
object obj = ResourceManager.GetObject("right2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap top {
get {
object obj = ResourceManager.GetObject("top", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap top1 {
get {
object obj = ResourceManager.GetObject("top1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap top2 {
get {
object obj = ResourceManager.GetObject("top2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}
(2)Form1.Designer.cs设计
开始窗体设计,自定义窗体承载皮肤图片的panel控件设计,最小化、最大化、关闭,menuStrip1菜单设计,最重要的用于更换皮肤的ContextMenuStrip控件。
在C#中,ContextMenuStrip控件是用于显示右键菜单的,而ToolStripMenuItem是该菜单中的一个项目。 对于ContextMenuStrip的DropDownItems,它们实际上是ToolStripItem的子类。设计三个ToolStripMenuItem菜单,用于切换不同的皮肤。
namespace _187
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
panel1_Title = new Panel();
pictureBox3_Min = new PictureBox();
pictureBox2_Max = new PictureBox();
pictureBox1_Close = new PictureBox();
panel4_Bottom = new Panel();
panel5_Left = new Panel();
panel2_LCorner = new Panel();
panel6_Right = new Panel();
panel3_RCorner = new Panel();
menuStrip1 = new MenuStrip();
toolStripMenuItem2 = new ToolStripMenuItem();
toolStripMenuItem3 = new ToolStripMenuItem();
toolStripMenuItem4 = new ToolStripMenuItem();
toolStripMenuItem5 = new ToolStripMenuItem();
toolStripMenuItem6 = new ToolStripMenuItem();
toolStripMenuItem1 = new ToolStripMenuItem();
contextMenuStrip1 = new ContextMenuStrip(components);
toolStripMenuItem7 = new ToolStripMenuItem();
toolStripMenuItem9 = new ToolStripMenuItem();
toolStripMenuItem10 = new ToolStripMenuItem();
toolStripMenuItem11 = new ToolStripMenuItem();
toolStripMenuItem8 = new ToolStripMenuItem();
panel1_Title.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureBox3_Min).BeginInit();
((System.ComponentModel.ISupportInitialize)pictureBox2_Max).BeginInit();
((System.ComponentModel.ISupportInitialize)pictureBox1_Close).BeginInit();
panel5_Left.SuspendLayout();
panel6_Right.SuspendLayout();
menuStrip1.SuspendLayout();
contextMenuStrip1.SuspendLayout();
SuspendLayout();
//
// panel1_Title
//
panel1_Title.BackgroundImageLayout = ImageLayout.Stretch;
panel1_Title.Controls.Add(pictureBox3_Min);
panel1_Title.Controls.Add(pictureBox2_Max);
panel1_Title.Controls.Add(pictureBox1_Close);
panel1_Title.Dock = DockStyle.Top;
panel1_Title.Location = new Point(0, 0);
panel1_Title.Name = "panel1_Title";
panel1_Title.Size = new Size(530, 31);
panel1_Title.TabIndex = 0;
panel1_Title.DoubleClick += Panel1_Title_DoubleClick;
panel1_Title.MouseDown += Panel1_Title_MouseDown;
panel1_Title.MouseMove += Panel1_Title_MouseMove;
panel1_Title.MouseUp += Panel1_Title_MouseUp;
//
// pictureBox3_Min
//
pictureBox3_Min.Anchor = AnchorStyles.Top | AnchorStyles.Right;
pictureBox3_Min.BackColor = Color.Transparent;
pictureBox3_Min.Location = new Point(443, 1);
pictureBox3_Min.Name = "pictureBox3_Min";
pictureBox3_Min.Size = new Size(29, 29);
pictureBox3_Min.TabIndex = 2;
pictureBox3_Min.TabStop = false;
pictureBox3_Min.Click += PictureBox3_Min_Click;
//
// pictureBox2_Max
//
pictureBox2_Max.Anchor = AnchorStyles.Top | AnchorStyles.Right;
pictureBox2_Max.BackColor = Color.Transparent;
pictureBox2_Max.Location = new Point(472, 1);
pictureBox2_Max.Name = "pictureBox2_Max";
pictureBox2_Max.Size = new Size(29, 29);
pictureBox2_Max.TabIndex = 1;
pictureBox2_Max.TabStop = false;
pictureBox2_Max.Click += PictureBox2_Max_Click;
//
// pictureBox1_Close
//
pictureBox1_Close.Anchor = AnchorStyles.Top | AnchorStyles.Right;
pictureBox1_Close.BackColor = Color.Transparent;
pictureBox1_Close.Location = new Point(501, 1);
pictureBox1_Close.Name = "pictureBox1_Close";
pictureBox1_Close.Size = new Size(29, 29);
pictureBox1_Close.TabIndex = 0;
pictureBox1_Close.TabStop = false;
pictureBox1_Close.Click += PictureBox1_Close_Click;
//
// panel4_Bottom
//
panel4_Bottom.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
panel4_Bottom.Location = new Point(8, 402);
panel4_Bottom.Name = "panel4_Bottom";
panel4_Bottom.Size = new Size(514, 8);
panel4_Bottom.TabIndex = 3;
panel4_Bottom.MouseDown += Panel4_Bottom_MouseDown;
panel4_Bottom.MouseMove += Panel4_Bottom_MouseMove;
panel4_Bottom.MouseUp += Panel4_Bottom_MouseUp;
//
// panel5_Left
//
panel5_Left.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
panel5_Left.Controls.Add(panel2_LCorner);
panel5_Left.Location = new Point(0, 31);
panel5_Left.Name = "panel5_Left";
panel5_Left.Size = new Size(8, 379);
panel5_Left.TabIndex = 4;
panel5_Left.MouseDown += Panel5_Left_MouseDown;
panel5_Left.MouseMove += Panel5_Left_MouseMove;
panel5_Left.MouseUp += Panel5_Left_MouseUp;
//
// panel2_LCorner
//
panel2_LCorner.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
panel2_LCorner.BackColor = Color.Transparent;
panel2_LCorner.Location = new Point(0, 371);
panel2_LCorner.Name = "panel2_LCorner";
panel2_LCorner.Size = new Size(8, 8);
panel2_LCorner.TabIndex = 7;
panel2_LCorner.MouseDown += Panel2_LCorner_MouseDown;
panel2_LCorner.MouseMove += Panel2_LCorner_MouseMove;
panel2_LCorner.MouseUp += Panel2_LCorner_MouseUp;
//
// panel6_Right
//
panel6_Right.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right;
panel6_Right.Controls.Add(panel3_RCorner);
panel6_Right.Location = new Point(522, 31);
panel6_Right.Name = "panel6_Right";
panel6_Right.Size = new Size(8, 379);
panel6_Right.TabIndex = 5;
panel6_Right.MouseDown += Panel6_Right_MouseDown;
panel6_Right.MouseMove += Panel6_Right_MouseMove;
panel6_Right.MouseUp += Panel6_Right_MouseUp;
//
// panel3_RCorner
//
panel3_RCorner.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
panel3_RCorner.BackColor = Color.Transparent;
panel3_RCorner.Location = new Point(0, 371);
panel3_RCorner.Name = "panel3_RCorner";
panel3_RCorner.Size = new Size(8, 8);
panel3_RCorner.TabIndex = 7;
panel3_RCorner.MouseDown += Panel3_RCorner_MouseDown;
panel3_RCorner.MouseMove += Panel3_RCorner_MouseMove;
panel3_RCorner.MouseUp += Panel3_RCorner_MouseUp;
//
// menuStrip1
//
menuStrip1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
menuStrip1.Dock = DockStyle.None;
menuStrip1.Items.AddRange(new ToolStripItem[] { toolStripMenuItem2, toolStripMenuItem3, toolStripMenuItem4, toolStripMenuItem5, toolStripMenuItem6, toolStripMenuItem1 });
menuStrip1.Location = new Point(8, 31);
menuStrip1.Name = "menuStrip1";
menuStrip1.Size = new Size(272, 25);
menuStrip1.TabIndex = 6;
menuStrip1.Text = "menuStrip1";
//
// toolStripMenuItem2
//
toolStripMenuItem2.Name = "toolStripMenuItem2";
toolStripMenuItem2.Size = new Size(44, 21);
toolStripMenuItem2.Text = "编辑";
//
// toolStripMenuItem3
//
toolStripMenuItem3.Name = "toolStripMenuItem3";
toolStripMenuItem3.Size = new Size(44, 21);
toolStripMenuItem3.Text = "视图";
//
// toolStripMenuItem4
//
toolStripMenuItem4.Name = "toolStripMenuItem4";
toolStripMenuItem4.Size = new Size(44, 21);
toolStripMenuItem4.Text = "工具";
//
// toolStripMenuItem5
//
toolStripMenuItem5.Name = "toolStripMenuItem5";
toolStripMenuItem5.Size = new Size(44, 21);
toolStripMenuItem5.Text = "窗口";
//
// toolStripMenuItem6
//
toolStripMenuItem6.Name = "toolStripMenuItem6";
toolStripMenuItem6.Size = new Size(44, 21);
toolStripMenuItem6.Text = "帮助";
//
// toolStripMenuItem1
//
toolStripMenuItem1.Name = "toolStripMenuItem1";
toolStripMenuItem1.Size = new Size(44, 21);
toolStripMenuItem1.Text = "文件";
//
// contextMenuStrip1
//
contextMenuStrip1.Items.AddRange(new ToolStripItem[] { toolStripMenuItem7, toolStripMenuItem8 });
contextMenuStrip1.Name = "contextMenuStrip1";
contextMenuStrip1.Size = new Size(181, 70);
//
// toolStripMenuItem7
//
toolStripMenuItem7.AutoSize = false;
toolStripMenuItem7.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem9, toolStripMenuItem10, toolStripMenuItem11 });
toolStripMenuItem7.Name = "toolStripMenuItem7";
toolStripMenuItem7.Size = new Size(180, 22);
toolStripMenuItem7.Text = "换皮肤";
//
// toolStripMenuItem9
//
toolStripMenuItem9.AutoSize = false;
toolStripMenuItem9.BackgroundImageLayout = ImageLayout.None;
toolStripMenuItem9.Name = "toolStripMenuItem9";
toolStripMenuItem9.Size = new Size(180, 22);
toolStripMenuItem9.Text = "蓝色经典";
toolStripMenuItem9.Click += ToolStripMenuItem9_Click;
//
// toolStripMenuItem10
//
toolStripMenuItem10.AutoSize = false;
toolStripMenuItem10.Name = "toolStripMenuItem10";
toolStripMenuItem10.Size = new Size(180, 22);
toolStripMenuItem10.Text = "绿色家园";
toolStripMenuItem10.Click += ToolStripMenuItem10_Click;
//
// toolStripMenuItem11
//
toolStripMenuItem11.AutoSize = false;
toolStripMenuItem11.Name = "toolStripMenuItem11";
toolStripMenuItem11.Size = new Size(180, 22);
toolStripMenuItem11.Text = "紫色小花";
toolStripMenuItem11.Click += ToolStripMenuItem11_Click;
//
// toolStripMenuItem8
//
toolStripMenuItem8.Name = "toolStripMenuItem8";
toolStripMenuItem8.Size = new Size(180, 22);
toolStripMenuItem8.Text = "退出";
toolStripMenuItem8.Click += ToolStripMenuItem8_Click;
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(530, 410);
ContextMenuStrip = contextMenuStrip1;
Controls.Add(panel6_Right);
Controls.Add(panel5_Left);
Controls.Add(panel4_Bottom);
Controls.Add(panel1_Title);
Controls.Add(menuStrip1);
FormBorderStyle = FormBorderStyle.None;
MainMenuStrip = menuStrip1;
Name = "Form1";
StartPosition = FormStartPosition.CenterScreen;
Text = "窗体换肤";
Activated += Form1_Activated;
Load += Form1_Load;
panel1_Title.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)pictureBox3_Min).EndInit();
((System.ComponentModel.ISupportInitialize)pictureBox2_Max).EndInit();
((System.ComponentModel.ISupportInitialize)pictureBox1_Close).EndInit();
panel5_Left.ResumeLayout(false);
panel6_Right.ResumeLayout(false);
menuStrip1.ResumeLayout(false);
menuStrip1.PerformLayout();
contextMenuStrip1.ResumeLayout(false);
ResumeLayout(false);
PerformLayout();
}
#endregion
private Panel panel1_Title;
private PictureBox pictureBox1_Close;
private PictureBox pictureBox3_Min;
private PictureBox pictureBox2_Max;
private Panel panel4_Bottom;
private Panel panel5_Left;
private Panel panel6_Right;
private MenuStrip menuStrip1;
private ToolStripMenuItem toolStripMenuItem1;
private ToolStripMenuItem toolStripMenuItem2;
private ToolStripMenuItem toolStripMenuItem3;
private ToolStripMenuItem toolStripMenuItem4;
private ToolStripMenuItem toolStripMenuItem5;
private ToolStripMenuItem toolStripMenuItem6;
private ContextMenuStrip contextMenuStrip1;
private ToolStripMenuItem toolStripMenuItem7;
private ToolStripMenuItem toolStripMenuItem9;
private ToolStripMenuItem toolStripMenuItem10;
private ToolStripMenuItem toolStripMenuItem11;
private ToolStripMenuItem toolStripMenuItem8;
private Panel panel2_LCorner;
private Panel panel3_RCorner;
}
}
(3)Form1.cs设计
所有控件的方法,都在这里设计。这个实例不仅仅能换肤,还能实现窗体最小化、最大化、关闭、鼠标拖动各个边框改变窗体大小;鼠标拖动左下角、右下角同时改变窗体的长和宽;
namespace _187
{
public partial class Form1 : Form
{
int top, left, height, width;
bool bol = false, bo = false, bolTop = false, bolLeft = false, bolRight = false, bolBottom = false, bolLeftCornu = false, bolRightCornu = false;
int x = 0, y = 0;
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 默认肤色绿色家园
/// </summary>
private void Form1_Load(object sender, EventArgs e)
{
ToolStripMenuItem10_Click(sender, e);
contextMenuStrip1.AutoSize = false; // 禁用自动调整大小
toolStripMenuItem9.AutoSize = false;
toolStripMenuItem10.AutoSize = false;
toolStripMenuItem11.AutoSize = false;
}
/// <summary>
/// 关闭窗体
/// </summary>
private void PictureBox1_Close_Click(object sender, EventArgs e)
{
Application.Exit();
}
/// <summary>
/// 最大化窗体及设置其图标
/// </summary>
private void PictureBox2_Max_Click(object sender, EventArgs e)
{
if (!bol)
{
top = Top;
left = Left;
height = Height;
width = Width;
Top = 0;
Left = 0;
int hg = SystemInformation.MaxWindowTrackSize.Height;
int wh = SystemInformation.MaxWindowTrackSize.Width;
Height = hg;
Width = wh;
bol = true;
if (toolStripMenuItem9.Checked)
pictureBox2_Max.Image = Properties.Resources.max;
if (toolStripMenuItem10.Checked)
pictureBox2_Max.Image = Properties.Resources.max1;
if (toolStripMenuItem11.Checked)
pictureBox2_Max.Image = Properties.Resources.max2;
}
else
{
Top = top;
Left = left;
Height = height;
Width = width;
bol = false;
if (toolStripMenuItem9.Checked)
pictureBox2_Max.Image = Properties.Resources.max_Normal;
if (toolStripMenuItem10.Checked)
pictureBox2_Max.Image = Properties.Resources.max_normal1;
if (toolStripMenuItem11.Checked)
pictureBox2_Max.Image = Properties.Resources.max_normal2;
}
}
/// <summary>
/// 最小化窗体
/// </summary>
private void PictureBox3_Min_Click(object sender, EventArgs e)
{
top = Top;
left = Left;
height = Height;
width = Width;
Height = 0;
Width = 0;
bo = true;
}
/// <summary>
/// 窗体被再次激活
/// </summary>
private void Form1_Activated(object sender, EventArgs e)
{
if (bo)
{
Top = top;
Left = left;
Height = height;
Width = width;
bo = false;
}
}
/// <summary>
/// 上边框鼠标按下
/// </summary>
private void Panel1_Title_MouseDown(object sender, MouseEventArgs e)
{
x = e.X;
y = e.Y;
bolTop = true;
}
/// <summary>
/// 上边框鼠标移动
/// </summary>
private void Panel1_Title_MouseMove(object sender, MouseEventArgs e)
{
if (bolTop)
{
Top += e.Y - y;
Left += e.X - x;
}
}
/// <summary>
/// 上边框鼠标释放
/// </summary>
private void Panel1_Title_MouseUp(object sender, MouseEventArgs e)
{
bolTop = false;
}
/// <summary>
/// 左边框鼠标按下
/// </summary>
private void Panel5_Left_MouseDown(object sender, MouseEventArgs e)
{
x = e.X;
bolLeft = true;
}
/// <summary>
/// 左边框鼠标移动
/// </summary>
private void Panel5_Left_MouseMove(object sender, MouseEventArgs e)
{
if (bolLeft)
{
Width += x - e.X;
Left += e.X - x;
}
}
/// <summary>
/// 左边框鼠标释放
/// </summary>
private void Panel5_Left_MouseUp(object sender, MouseEventArgs e)
{
bolLeft = false;
}
/// <summary>
/// 右边框鼠标按下
/// </summary>
private void Panel6_Right_MouseDown(object sender, MouseEventArgs e)
{
x = e.X;
bolRight = true;
}
/// <summary>
/// 右边框鼠标移动
/// </summary>
private void Panel6_Right_MouseMove(object sender, MouseEventArgs e)
{
if (bolRight)
{
Width += e.X - x;
}
}
/// <summary>
/// 右边框鼠标释放
/// </summary>
private void Panel6_Right_MouseUp(object sender, MouseEventArgs e)
{
bolRight = false;
}
/// <summary>
/// 下边框鼠标按下
/// </summary>
private void Panel4_Bottom_MouseDown(object sender, MouseEventArgs e)
{
y = e.Y;
bolBottom = true;
}
/// <summary>
/// 下边框鼠标移动
/// </summary>
private void Panel4_Bottom_MouseMove(object sender, MouseEventArgs e)
{
if (bolBottom)
{
Height += e.Y - y;
}
}
/// <summary>
/// 下边框鼠标释放
/// </summary>
private void Panel4_Bottom_MouseUp(object sender, MouseEventArgs e)
{
bolBottom = false;
}
/// <summary>
/// 左下角鼠标按下
/// </summary>
private void Panel2_LCorner_MouseDown(object sender, MouseEventArgs e)
{
x = e.X;
y = e.Y;
bolLeftCornu = true;
}
/// <summary>
/// 左下角鼠标移动
/// </summary>
private void Panel2_LCorner_MouseMove(object sender, MouseEventArgs e)
{
if (bolLeftCornu)
{
Width += x - e.X;
Left += e.X - x;
Height += e.Y - y;
}
}
/// <summary>
/// 左下角鼠标释放
/// </summary>
private void Panel2_LCorner_MouseUp(object sender, MouseEventArgs e)
{
x = e.X;
y = e.Y;
bolLeftCornu = false;
}
/// <summary>
/// 右下角鼠标按下
/// </summary>
private void Panel3_RCorner_MouseDown(object sender, MouseEventArgs e)
{
bolRightCornu = true;
}
/// <summary>
/// 右下角鼠标移动
/// </summary>
private void Panel3_RCorner_MouseMove(object sender, MouseEventArgs e)
{
if (bolRightCornu)
{
Width += e.X - x;
Height += e.Y - y;
}
}
/// <summary>
/// 右下角鼠标释放
/// </summary>
private void Panel3_RCorner_MouseUp(object sender, MouseEventArgs e)
{
bolRightCornu = false;
}
/// <summary>
/// ContextMenuSrip控件选择退出
/// </summary>
private void ToolStripMenuItem8_Click(object sender, EventArgs e)
{
Application.Exit();
}
/// <summary>
/// ContextMenuSrip控件选择肤色:蓝色经典
/// </summary>
private void ToolStripMenuItem9_Click(object sender, EventArgs e)
{
panel1_Title.BackgroundImage = Properties.Resources.top;
panel5_Left.BackgroundImage = Properties.Resources.left;
panel6_Right.BackgroundImage = Properties.Resources.right;
panel4_Bottom.BackgroundImage = Properties.Resources.bottom;
pictureBox3_Min.Image = Properties.Resources.min;
if (bol == true)
{
pictureBox2_Max.Image = Properties.Resources.max;
}
else
{
pictureBox2_Max.Image = Properties.Resources.max_Normal;
}
pictureBox1_Close.Image = Properties.Resources.close;
toolStripMenuItem9.Checked = true;
toolStripMenuItem10.Checked = false;
toolStripMenuItem11.Checked = false;
menuStrip1.BackgroundImage = Properties.Resources.menu;
BackgroundImage = Properties.Resources.background;
}
/// <summary>
/// ContextMenuSrip控件选择肤色:绿色家园
/// </summary>
private void ToolStripMenuItem10_Click(object sender, EventArgs e)
{
panel1_Title.BackgroundImage = Properties.Resources.top1;
panel5_Left.BackgroundImage = Properties.Resources.left1;
panel6_Right.BackgroundImage = Properties.Resources.right1;
panel4_Bottom.BackgroundImage = Properties.Resources.bottom1;
pictureBox3_Min.Image = Properties.Resources.min1;
if (bol == true)
{
pictureBox2_Max.Image = Properties.Resources.max1;
}
else
{
pictureBox2_Max.Image = Properties.Resources.max_normal1;
}
pictureBox1_Close.Image = Properties.Resources.close1;
toolStripMenuItem9.Checked = false;
toolStripMenuItem10.Checked = true;
toolStripMenuItem11.Checked = false;
menuStrip1.BackgroundImage = Properties.Resources.menu1;
BackgroundImage = Properties.Resources.background1;
}
/// <summary>
/// ContextMenuSrip控件选择肤色:紫色小花
/// </summary>
private void ToolStripMenuItem11_Click(object sender, EventArgs e)
{
panel1_Title.BackgroundImage = Properties.Resources.top2;
panel5_Left.BackgroundImage = Properties.Resources.left2;
panel6_Right.BackgroundImage = Properties.Resources.right2;
panel4_Bottom.BackgroundImage = Properties.Resources.bottom2;
pictureBox3_Min.Image = Properties.Resources.min2;
if (bol == true)
{
pictureBox2_Max.Image = Properties.Resources.max2;
}
else
{
pictureBox2_Max.Image = Properties.Resources.max_normal2;
}
pictureBox1_Close.Image = Properties.Resources.close2;
toolStripMenuItem9.Checked = false;
toolStripMenuItem10.Checked = false;
toolStripMenuItem11.Checked = true;
menuStrip1.BackgroundImage = Properties.Resources.menu2;
BackgroundImage = Properties.Resources.background2;
}
/// <summary>
/// 在最大化窗体和正常窗体之间切换
/// </summary>
private void Panel1_Title_DoubleClick(object sender, EventArgs e)
{
PictureBox2_Max_Click(sender, e);
}
}
}
(4) 生成效果
(5)一个遗憾
本实例有一个缺点,就是窗体左上角显示的切换后的皮肤名称(toolStripMenuItem9、10、11)会随着窗体最大化而被拉伸,字体扭曲了,很难看。我没有解决掉也没时间去解决。有兴趣的网友一旦解决了这个缺陷,请贴出来你用好点子。