25人参与 • 2026-01-20 • Asp.net
button控件(或picturebox等)制作最大化、最小化、关闭按钮。先在 winforms 窗体中添加 3 个button控件,分别命名为:
btnmin(最小化按钮)btnmax(最大化 / 还原按钮)btnclose(关闭按钮)using system;
using system.drawing;
using system.windows.forms;
namespace customwindowbuttons
{
public partial class form1 : form
{
// 记录鼠标拖动时的起始位置
private point mousedownpoint = point.empty;
public form1()
{
initializecomponent();
// 窗体初始化设置
initformsettings();
// 绑定按钮事件
bindbuttonevents();
}
/// <summary>
/// 初始化窗体设置(移除系统边框、设置窗体样式)
/// </summary>
private void initformsettings()
{
// 移除系统默认窗口边框和标题栏
this.formborderstyle = formborderstyle.none;
// 设置窗体默认大小
this.size = new size(800, 600);
// 居中显示
this.startposition = formstartposition.centerscreen;
// 自定义按钮样式初始化(可选,简化外观)
btnmin.size = new size(40, 30);
btnmax.size = new size(40, 30);
btnclose.size = new size(40, 30);
btnmin.text = "—";
btnmax.text = "□";
btnclose.text = "×";
btnmin.font = new font("arial", 12, fontstyle.bold);
btnmax.font = new font("arial", 12, fontstyle.bold);
btnclose.font = new font("arial", 12, fontstyle.bold);
// 排列按钮(窗体右上角)
btnclose.location = new point(this.width - 45, 5);
btnmax.location = new point(this.width - 90, 5);
btnmin.location = new point(this.width - 135, 5);
}
/// <summary>
/// 绑定按钮的点击事件和鼠标悬浮/离开事件
/// </summary>
private void bindbuttonevents()
{
// 最小化按钮点击事件
btnmin.click += btnmin_click;
// 最大化/还原按钮点击事件
btnmax.click += btnmax_click;
// 关闭按钮点击事件
btnclose.click += btnclose_click;
// 可选:添加按钮鼠标悬浮效果,提升交互体验
btnmin.mouseenter += button_mouseenter;
btnmax.mouseenter += button_mouseenter;
btnclose.mouseenter += button_mouseenter;
btnmin.mouseleave += button_mouseleave;
btnmax.mouseleave += button_mouseleave;
btnclose.mouseleave += button_mouseleave;
}
#region 按钮事件处理
/// <summary>
/// 最小化按钮点击事件
/// </summary>
private void btnmin_click(object sender, eventargs e)
{
// 调用窗体内置方法,将窗口最小化到任务栏
this.windowstate = formwindowstate.minimized;
}
/// <summary>
/// 最大化/还原按钮点击事件
/// </summary>
private void btnmax_click(object sender, eventargs e)
{
// 判断当前窗口状态,切换最大化/还原
if (this.windowstate == formwindowstate.maximized)
{
// 还原窗口默认大小
this.windowstate = formwindowstate.normal;
btnmax.text = "□"; // 更新按钮文本
}
else
{
// 最大化窗口
this.windowstate = formwindowstate.maximized;
btnmax.text = "■"; // 更新按钮文本
}
// 窗口状态变化后,重新调整按钮位置(避免最大化后按钮偏移)
adjustbuttonposition();
}
/// <summary>
/// 关闭按钮点击事件
/// </summary>
private void btnclose_click(object sender, eventargs e)
{
// 调用窗体内置方法,关闭当前窗体
this.close();
}
/// <summary>
/// 鼠标悬浮按钮时,更改按钮背景色
/// </summary>
private void button_mouseenter(object sender, eventargs e)
{
button btn = sender as button;
if (btn != null)
{
// 关闭按钮悬浮时设置红色背景,其他按钮设置浅灰色
btn.backcolor = btn == btnclose ? color.lightcoral : color.lightgray;
}
}
/// <summary>
/// 鼠标离开按钮时,恢复按钮默认背景色
/// </summary>
private void button_mouseleave(object sender, eventargs e)
{
button btn = sender as button;
if (btn != null)
{
btn.backcolor = systemcolors.control;
}
}
#endregion
#region 辅助方法
/// <summary>
/// 调整按钮位置(适配窗口最大化/还原状态)
/// </summary>
private void adjustbuttonposition()
{
btnclose.location = new point(this.width - 45, 5);
btnmax.location = new point(this.width - 90, 5);
btnmin.location = new point(this.width - 135, 5);
}
/// <summary>
/// 实现窗体拖动功能(重写鼠标按下/移动/松开事件)
/// </summary>
protected override void onmousedown(mouseeventargs e)
{
base.onmousedown(e);
// 记录鼠标按下时的坐标(相对于窗体)
if (e.button == mousebuttons.left)
{
mousedownpoint = new point(e.x, e.y);
}
}
protected override void onmousemove(mouseeventargs e)
{
base.onmousemove(e);
// 鼠标左键按住且起始位置有效时,拖动窗体
if (e.button == mousebuttons.left && mousedownpoint != point.empty)
{
// 计算窗体新位置
this.location = new point(
this.left + (e.x - mousedownpoint.x),
this.top + (e.y - mousedownpoint.y)
);
}
}
protected override void onmouseup(mouseeventargs e)
{
base.onmouseup(e);
// 鼠标松开后,重置起始位置
mousedownpoint = point.empty;
}
#endregion
/// <summary>
/// 窗口大小改变时,重新调整按钮位置(适配手动拉伸窗口)
/// </summary>
protected override void onresize(eventargs e)
{
base.onresize(e);
if (this.windowstate != formwindowstate.minimized)
{
adjustbuttonposition();
}
}
}
}
formborderstyle = formborderstyle.none,隐藏窗体自带的标题栏、边框和系统按钮,为自定义按钮腾出空间。this.windowstate = formwindowstate.minimizedthis.windowstate = formwindowstate.maximizedthis.windowstate = formwindowstate.normalonmousedown、onmousemove、onmouseup方法,记录鼠标按下时的坐标,移动时计算窗体偏移量,实现手动拖动窗体的功能(弥补移除系统标题栏后的缺失功能)。adjustbuttonposition方法重新调整按钮位置,避免按钮偏移;同时更新最大化按钮的文本,提升用户辨识度。button替换为picturebox,加载自定义的图标(最大化、最小化、关闭图标),实现更精致的界面效果。this.minimumsize = new size(400, 300),避免窗口被拉伸到过小。btnclose_click事件中添加messagebox.show,确认用户是否要关闭窗口,防止误操作。formborderstyle、绑定click事件、实现窗体拖动、适配窗口状态变化。以上就是c#实现自定义的窗口最大化、最小化和关闭按钮功能的详细内容,更多关于c#窗口最大化、最小化和关闭按钮的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论