C#自定义最大化、最小化和关闭按钮

目录

1.资源文件

2.读取资源文件中的图片

3.WindowState属性

4. 示例


        用户在制作应用程序时,为了使用户界面更加美观,一般都自己设计窗体的外观,以及窗体的最大化、最小化和关闭按钮。本例通过资源文件来存储窗体的外观,以及最大化、最小化和关闭按钮的图片,再通过鼠标移入、移出事件来实现按钮的动态效果。

        本实例首先使用资源文件来存储窗体的外观、“最大化”、“最小化”和“关闭”按钮的图片,然后使用窗体的WindowState属性实现窗体的最大化、最小化和还原操作。

1.资源文件

        在加载图片时,如果是以本地资源进行加载,那么在运行可执行文件时,必须在当前目录下存放指定的图片,这样会给用户带来不必要的麻烦。为了解决这一问题,本实例利用资源文件来存储相关的图片。

        将图片存入资源文件中将图片存入资源文件中的步骤如下:

  • 在“解决方案资源管理器”面板中打开Properties中的Resources.resx文件。
  • 在“添加资源”下拉列表框中选择“添加现有文件”选项,弹出“将现有文件添加到资源中”窗体,在该窗体中将指定的图片添加到资源文件中。

2.读取资源文件中的图片

        读取资源文件中的图片主要是用Properties命名空间下的Resources资源类。实现代码如下:pictureBox.Image =Properties.Resources.最大化按钮;将图片添加到Resources.resx文件后,必须对整个项目进行保存,否则无法在Resources资源类中调用已添加的图片。

3.WindowState属性

        该属性用于获取或设置窗体的窗口状态。语法格式如下:

public FormWindowState WindowState {get;set;}
参数说明
属性值:FormWindowState枚举值之一,表示窗体的窗口状态。

        FormWindowState枚举值及说明如表:

枚   举 值

描   述

Maximized

最大化的窗口

Minimized

最小化的窗口

Normal

默认大小的窗口

4. 示例

// 自定义最小化、最大化、关闭窗体的按钮
namespace _163_2
{public partial class Form1 : Form{private Panel? panel1;private Panel? panel2;private PictureBox? pictureBox_Close;private PictureBox? pictureBox_Maximize;private PictureBox? pictureBox_Minimize;public Form1(){InitializeComponent();StartPosition = FormStartPosition.CenterScreen;Load += Form1_Load;}private void Form1_Load(object? sender, EventArgs e){// // pictureBox_Close// pictureBox_Close = new PictureBox{Anchor = AnchorStyles.Top | AnchorStyles.Right,Image = Properties.Resources.关闭按钮,Location = new Point(251, 10),Name = "pictureBox_Close",Size = new Size(20, 20),SizeMode = PictureBoxSizeMode.StretchImage,TabIndex = 2,TabStop = false,Tag = "2"};pictureBox_Close.Click += PictureBox_Close_Click!;pictureBox_Close.MouseEnter += PictureBox_Close_MouseEnter!;pictureBox_Close.MouseLeave += PictureBox_Close_MouseLeave!;// // pictureBox_Maximize// pictureBox_Maximize = new PictureBox{Anchor = AnchorStyles.Top | AnchorStyles.Right,Image = Properties.Resources.最大化按钮,Location = new Point(219, 10),Name = "pictureBox_Maximize",Size = new Size(20, 20),SizeMode = PictureBoxSizeMode.StretchImage,TabIndex = 1,TabStop = false,Tag = "1"};pictureBox_Maximize.Click += PictureBox_Close_Click!;pictureBox_Maximize.MouseEnter += PictureBox_Close_MouseEnter!;pictureBox_Maximize.MouseLeave += PictureBox_Close_MouseLeave!;// // pictureBox_Minimize// pictureBox_Minimize = new PictureBox{Anchor = AnchorStyles.Top | AnchorStyles.Right,Image = Properties.Resources.最小化按钮,Location = new Point(187, 10),Name = "pictureBox_Minimize",Size = new Size(20, 20),SizeMode = PictureBoxSizeMode.StretchImage,TabIndex = 0,TabStop = false,Tag = "0"};pictureBox_Minimize.Click += PictureBox_Close_Click!;pictureBox_Minimize.MouseEnter += PictureBox_Close_MouseEnter!;pictureBox_Minimize.MouseLeave += PictureBox_Close_MouseLeave!;// // panel1// panel1 = new Panel{BackgroundImage = Properties.Resources.登录界面标题,BackgroundImageLayout = ImageLayout.Stretch,Dock = DockStyle.Top,Location = new Point(0, 0),Name = "panel1",Size = new Size(284, 38),TabIndex = 0};panel1.Controls.Add(pictureBox_Close);panel1.Controls.Add(pictureBox_Maximize);panel1.Controls.Add(pictureBox_Minimize);panel1.SuspendLayout();// // panel2// panel2 = new Panel{BackgroundImage = Properties.Resources.登录界面下面,BackgroundImageLayout = ImageLayout.Stretch,Dock = DockStyle.Fill,Location = new Point(0, 38),Name = "panel2",Size = new Size(284, 162),TabIndex = 0};// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(284, 200);Controls.Add(panel2);Controls.Add(panel1);FormBorderStyle = FormBorderStyle.None;Name = "Form1";Text = "Form1";panel1.ResumeLayout(false);}#region  设置窗体的最大化、最小化和关闭按钮的单击事件/// <summary>/// 设置窗体的最大化、最小化和关闭按钮的单击事件/// </summary>/// <param Form_Tem="Form">窗体</param>/// <param Tag="int">标识</param>public static void FormClickMeans(Form Form_Tem, int Tag){switch (Tag)//窗体的操作样式{case 0://窗体最小化Form_Tem.WindowState = FormWindowState.Minimized;//窗体最小化break;case 1://窗体最大化和还原的切换{if (Form_Tem.WindowState == FormWindowState.Maximized)//如果窗体当前是最大化Form_Tem.WindowState = FormWindowState.Normal;//还原窗体大小elseForm_Tem.WindowState = FormWindowState.Maximized;//窗体最大化break;}case 2:	//关闭窗体Form_Tem.Close();break;}}#endregion#region  控制图片的切换状态/// <summary>/// 控制图片的切换状态/// </summary>/// <param sender =" object ">要改变图片的对象</param>/// <param Tag="int">控件标识</param>/// <param ns="int">移出移入标识</param>private static PictureBox tem_PictB = new(); //实例化PictureBox控件public static PictureBox Tem_PictB { get => tem_PictB; set => tem_PictB = value; }public static void ImageSwitch(object sender, int Tag, int MouseState){Tem_PictB = (PictureBox)sender;switch (Tag)//获取标识{case 0://当前为最小化按钮{Tem_PictB.Image = null;//清空图片if (MouseState == 0)//鼠标移入Tem_PictB.Image = Properties.Resources.最小化变色;if (MouseState == 1)//鼠标移出Tem_PictB.Image = Properties.Resources.最小化按钮;break;}case 1://最大化按钮{Tem_PictB.Image = null;if (MouseState == 0)Tem_PictB.Image = Properties.Resources.最大化变色;if (MouseState == 1)Tem_PictB.Image = Properties.Resources.最大化按钮;break;}case 2://关闭按钮{Tem_PictB.Image = null;if (MouseState == 0)Tem_PictB.Image = Properties.Resources.关闭变色;if (MouseState == 1)Tem_PictB.Image = Properties.Resources.关闭按钮;break;}default:break;}}#endregionprivate void PictureBox_Close_Click(object sender, EventArgs e){FormClickMeans(this, Convert.ToInt16(((PictureBox)sender).Tag!.ToString()));//设置鼠标单击时按钮的图片}private void PictureBox_Close_MouseEnter(object sender, EventArgs e){ImageSwitch(sender, Convert.ToInt16(((PictureBox)sender).Tag!.ToString()), 0);//设置鼠标移入后按钮的图片}private void PictureBox_Close_MouseLeave(object sender, EventArgs e){ImageSwitch(sender, Convert.ToInt16(((PictureBox)sender).Tag!.ToString()), 1);//设置鼠标移出后按钮的图片}}
}

 

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

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

相关文章

【机器学习之---数学】随机游走

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 随机游走 1. 概念 1.1 例1 在你的饮食俱乐部度过了一个富有成效的晚上后&#xff0c;你在不太清醒的状态下离开了。因此&#xff0c;你会醉醺醺地在展…

算法系列--动态规划--回文子串系列

&#x1f495;"我们好像在池塘的水底&#xff0c;从一个月亮走向另一个月亮。。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;算法系列–动态规划–回文子串系列 今天为大家带来的是算法系列--动态规划--回文子串系列(1),本文重点掌握如何快速判…

esp单片机下arduino_gfx不相干显示驱动优化对flash空间的占用对比

一般情况下&#xff0c;很多esp32或者esp8266下的tft模块驱动都会包含很多种&#xff0c;而我们只需要其中一种&#xff0c;那就有个疑问这些被编译进的显示驱动到底占用了多少空间&#xff0c;是否需要把他优化掉&#xff1f; 这是默认的驱动列表&#xff1a; 84个文件&…

Java毕业设计-基于springboot开发的原创歌曲分享平台-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、平台功能模块2、后台功能模块2.1管理员功能模块2.2用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开…

Node爬虫:原理简介

在数字化时代&#xff0c;网络爬虫作为一种自动化收集和分析网络数据的技术&#xff0c;得到了广泛的应用。Node.js&#xff0c;以其异步I/O模型和事件驱动的特性&#xff0c;成为实现高效爬虫的理想选择。然而&#xff0c;爬虫在收集数据时&#xff0c;往往面临着诸如反爬虫机…

HarmonyOS 应用开发之任务(Mission)管理场景介绍

任务&#xff08;Mission&#xff09;管理相关的基本概念如下&#xff1a; AbilityRecord&#xff1a;系统服务侧管理一个UIAbility实例的最小单元&#xff0c;对应一个应用侧的UIAbility组件实例。系统服务侧管理UIAbility实例数量上限为512个。MissionRecord&#xff1a;任务…

Unity类银河恶魔城学习记录11-7 p109 Aplly item modifiers源代码

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

1. Java概述

文章目录 1.Java语言概述1.1 Java介绍1.1.1 软件开发概述1.1.2 计算机语言1.1.3 Java 简史1.1.4 Java 技术体系平台1.1.5 Java在各领域的应用1.1.6 Java语言特点1.1.7 Java核心机制一-Java虚拟机1.1.8 Java核心机制二-垃圾回收1.1.9 Java开发工具 1.2 Java环境搭建1.2.1 JDK、J…

【软件安装】(十四)Ubuntu22.04安装Psensor硬件监视器

一个愿意伫立在巨人肩膀上的农民...... Ubuntu系统硬件运行查询输入指令太繁琐&#xff0c;终端展示不直观&#xff0c;因此这款具有可视化监控Ubuntu系统下当前电脑的硬件CPU&#xff08;中央处理器&#xff09;、GPU&#xff08;显卡&#xff09;和硬盘等温度等功能&#xff…

【JAVAEE学习】探究Java中多线程的使用和重点及考点

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

安装uim-ui插件不成功,成功解决

安装&#xff1a;这种安装&#xff0c;umi4 不支持&#xff0c;只有umi3才支持。而我发现官网现在默认使用的umi4。 yarn add umijs/preset-ui -D 解决&#xff1a;更改umi版本重新安装umi3 npm i ant-design/pro-cli3.1.0 -g #使用umi3 (指定umi3版本) pro create user-ce…

每日一题 第五十期 Codeforces Round 937 (Div. 4)

F. 0, 1, 2, Tree! time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard input output: standard output Find the minimum height of a rooted tree † ^{\dagger} † with a b c abc abc vertices that satisfies the following c…

Python学习:模块

python 模块 Python 的模块是一个包含 Python 代码的文件&#xff0c;被用来组织和重用代码。下面详细解释模块&#xff0c;并给出一个示例&#xff1a; 创建模块&#xff1a;要创建模块&#xff0c;只需编写包含函数、类或变量的 Python 文件&#xff0c;并将其保存为以 .py 结…

在宝塔面板中,为自己的云服务器安装SSL证书,为所搭建的网站启用https(主要部分攻略)

前提条件 My HTTP website is running Nginx on Debian 10&#xff08;或者11&#xff09; 时间&#xff1a;2024-3-28 16:25:52 你的网站部署在Debain 10&#xff08;或者11&#xff09;的 Nginx上 安装单域名证书&#xff08;默认&#xff09;&#xff08;非泛域名&#xf…

香港服务器怎么看是CN2 GT线路还是CN2 GIA线路?

不知道有没有小伙伴们注意过&#xff0c;很多人在租用香港服务器的时候都习惯性选择 CN2 线路&#xff1f;仿佛香港服务器是否采用 CN2 线路成为个人企业选择香港服务器的一个标准。其实&#xff0c;香港服务器有CN2、优化直连(163)、BGP多线(包含了国际和国内线路)&#xff0c…

健身运动耳机哪个牌子好?力荐五大品质翘楚的精品

健身已经成为许多人追求健康与活力的重要方式&#xff0c;而在健身的过程中&#xff0c;一款优质的耳机不仅能让你沉浸于音乐的世界&#xff0c;更能提升运动体验&#xff0c;激发无限潜能&#xff0c;那么如何选择一款既适合运动又品质卓越的耳机呢&#xff1f;今天我这个健身…

自动发卡平台源码优化版,支持个人免签支付

源码下载地址&#xff1a;自动发卡平台源码优化版.zip 环境要求&#xff1a; php 8.0 v1.2.6◂ 1.修复店铺共享连接时异常问题 2024-03-13 23:54:20 v1.2.5 1.[新增]用户界面硬币增款扣款操作 2.[新增]前台对接库存信息显示 3.[新增]文件缓存工具类[FileCache] 4.[新增]库存同…

期货开户要找到适合自己的系统

物有一个生物圈&#xff0c;大鱼吃小鱼&#xff0c;小鱼吃虾。在期货市场这条生物圈里面&#xff0c;大部分人就是期货市场的虾子&#xff0c;是被吃的&#xff0c;所以必须成长起来&#xff0c;往更高一层走&#xff0c;到可以吃虾子的时候&#xff0c;就是挣钱的时候。学习不…

buy me a btc 使用数字货币进行打赏赞助

最近在调研使用加密货币打赏的平台&#xff0c;发现idatariver平台 https://idatariver.com 推出的buymeabtc功能刚好符合使用场景&#xff0c;下图为平台的演示项目, 演示项目入口 https://buymeabtc.com/idatariver 特点 不少人都听说过buymeacoffee&#xff0c;可以在上面发…

Vue element-plus 导航栏 [el-menu]

导航栏 [el-menu] Menu 菜单 | Element Plus el-menu有很多属性和子标签&#xff0c;为网站提供导航功能的菜单。 常用标签&#xff1a; 它里面有两个子标签。el-menu-item&#xff0c;它其实就是el-menu每一个里面的item&#xff0c;item就是真实匹配到路由的每个栏目&#…