C#自定义窗体更换皮肤的方法:创建特殊窗体

目录

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();}#endregionprivate 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)会随着窗体最大化而被拉伸,字体扭曲了,很难看。我没有解决掉也没时间去解决。有兴趣的网友一旦解决了这个缺陷,请贴出来你用好点子。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2969008.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Unity类银河恶魔城学习记录12-17 p139 In game UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI.cs using UnityEngine;public class UI : MonoBehaviour {[SerializeFie…

【Linux】创建IDEA桌面快捷方式

Linux系统安装IDEA保姆级教程_linux安装idea-CSDN博客 在Ubuntu上安装Intellij IDEA并创建桌面快捷方式 - 极客子羽 - 博客园 (cnblogs.com) 下载安装包解压到指定目录 /opt/softWare 进入bin目录&#xff0c;ll查看 桌面打开终端&#xff0c;创建文件 touch idea.desktop s…

面试题:Java中int符号数字的位运算与操作 + 原码、反码、补码之间如何进行转换

题目来源 阿里-淘天-技术1面 问题 -1和4做位运算与操作&#xff0c;结果是多少&#xff1f; 答案 正确答案 4 通过Java代码验证如下&#xff1a; 我的回答 -5&#xff0c;但是-5是错误的答案。 面试的时候&#xff0c;面试官没有告诉我对错。 为什么&#xff1f; 到底…

上网行为审计软件有哪些|好用的上网行为管控软件推荐

上述图片中提到的情况&#xff0c;可能有人会有些疑惑&#xff0c;不过无妨。 小编来告诉你是怎么回事&#xff01; 这是因为他们老板使用了上网行为审计软件&#xff01; 一、什么是上网行为审计软件 上网行为审计软件是一种专门用于监控和管理员工或学生上网行为的软件系统…

36. UE5 RPG在激活技能时使用蒙太奇动画

在上一篇文章里面&#xff0c;我们实现了一个简单的火球术&#xff0c;创建了火球术的火球&#xff0c;以及能发射它的技能。很简陋&#xff0c;在技能触发的时候&#xff0c;直接在武器的位置生成火球发射出去。在一篇文章里&#xff0c;我们要实现使用技能时&#xff0c;角色…

盒子模型之怪异盒模型

这个是标准盒模型 这个是怪异盒模型 box-sizing:content-box;默认是标准盒模型 box-sizing:border-box;是怪异盒模型&#xff0c;会挤压里面的内容&#xff0c;不管怎么设置边框始终都是当初设置的200px <!DOCTYPE html> <html lang"en"> <head>…

leetcode199 二叉树的右视图

题目 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 解析 这道题首先能想到的办法&#xff0c;就是使用迭代法层次遍历&…

【Linux】文件描述符——万字详解

目录​​​​​​​ 前言 预备知识 复习C语言的文件接口 写方式打开文件 追加方式打开文件 读方式打开文件 系统的文件接口 open close write read 文件描述符 0 & 1 & 2 理解文件描述符 文件描述符的分配规则 重定向的本质 dup2 理解Linux下一切…

近屿OJAC带你解读:AIGC核心知识点LLM

近年来&#xff0c;人工智能&#xff08;AI&#xff09;领域经历了令人瞩目的增长&#xff0c;尤其是自然语言处理&#xff08;NLP&#xff09;。你知道是什么推动了NLP领域的这种飞速发展吗&#xff1f;没错&#xff0c;那就是大型语言模型LLM。这些模型可能会彻底改变我们与科…

【华为 ICT HCIA eNSP 习题汇总】——题目集17

1、以下哪项不属于网络层安全威胁&#xff1f; A、DDos攻击 B、钓鱼攻击 C、IP Spoofing D、IP地址扫描 考点&#xff1a;网络安全 解析&#xff1a;&#xff08;B&#xff09; 钓鱼攻击通常被认为是应用层的安全威胁&#xff0c;也有在网络层进行伪装实施钓鱼攻击&#xff0c;…

揭秘分享京东商品详情数据接口(商品属性,sku,价格)API接口可测试

今天给大家分享关于封装根据京东商品ID或商品链接批量获取京东商品详情数据接口方法&#xff0c;支持高并发请求。 如果你对京东的商品详情数据感兴趣&#xff0c;我建议你采取以下合法和合规的途径&#xff1a; 使用京东开放平台&#xff1a;京东开放平台提供了一系列的API接…

MySQL-使用CPP接入到MySQL

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;MySQL &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容介绍如何在c/cpp代码连接和管理数据库 文章目录 MySQL-…

中标麒麟系统VSCode 终端字体间距变大的解决办法

设置 一、打开设置-用户-功能-终端 二、搜索 Integrated: Font Family, 如下图 至于字体的设置&#xff0c;不同系统设置并不一样 在CentOS7内核的中标麒麟系统&#xff0c;需要设置字体为“Courier New”&#xff0c;显示比较正常 参考链接 Vscode——终端字体突然间距变大…

探索 IntelliJ IDEA 2024.1最新变化:全面升级助力编码效率

探索 IntelliJ IDEA 2024.1最新变化&#xff1a;全面升级助力编码效率 文章目录 探索 IntelliJ IDEA 2024.1最新变化&#xff1a;全面升级助力编码效率摘要引言 IntelliJ IDEA 2024.1 最新变化关键亮点全行代码补全 Ultimate对 Java 22 功能的支持新终端 Beta编辑器中的粘性行 …

网工内推 | 兴业银行总行正编,科技运维部,硕士以上学历

01 兴业银行 招聘岗位&#xff1a;安全渗透专家 职责描述&#xff1a; 1.负责牵头组织本行红蓝对抗、攻防演练等工作&#xff1b; 2.负责牵头制定有效的渗透测试方案&#xff0c;开展对本行防御体系的验证工作&#xff1b; 3.负责牵头组织本行各类应用系统的渗透测试与漏洞扫…

SpringBoot + Redis实现用户信息登录的缓存

&#x1f34e;前言 &#x1f350;项目的背景 背景&#xff1a;&#x1f349;当我们在完成用户信息登录时&#xff0c;我们往往每次都会在数据库中查询用户的记录&#xff0c;生成token并返回给前端&#xff0c;不过这样会有一定的问题。 &#x1f350;造成的问题 问题&#xf…

《游戏系统设计十二》灵活且简单的条件检查系统

目录 1、序言 2、需求 3、实现 3.1 思路 3.2 代码实现 4、总结 1、序言 每个游戏都有一些检查性的任务&#xff0c;在做一些判断的时候&#xff0c;判断等级是不是满足需求。 比如如下场景&#xff1a;在进入副本的时候需要检查玩家等级是否满足&#xff0c;满足之后才…

Nginx莫名奇妙返回了404

描述 nginx作为反向代理&#xff0c;代理python的服务&#xff0c;但是通过代理访问服务的时候&#xff0c;报了404的错误。 难受的是客户现场没有查看日志的权限&#xff0c;只有查看配置文件的权限&#xff0c;我们检测了几遍配置文件也没有找到问题&#xff0c;哎~ 问题引…

vue里面事件修饰符.stop使用案例

Vue.js 事件修饰符 .stop 用于阻止事件继续传播&#xff0c;即阻止事件冒泡。这在处理父子组件之间的事件通信时特别有用&#xff0c;可以防止事件从子组件冒泡到父组件&#xff0c;或者在一个元素上绑定多个事件处理函数时&#xff0c;阻止后续事件处理函数的执行。 下面是一个…

nodejs工具模块学习

util 是一个Node.js 核心模块&#xff0c;提供常用函数的集合&#xff1b; util.inspect(object,[showHidden],[depth],[colors]) 是一个将任意对象转换 为字符串的方法&#xff0c;通常用于调试和错误输出&#xff1b; 如果只有一个参数 object&#xff0c;是要转换的对象&…