向窗体的标题栏添加“最小化到托盘”按钮






4.33/5 (22投票s)
2005年4月20日
2分钟阅读

273602

9995
一篇关于如何向标题栏添加自定义按钮的文章。
引言
本文档简要介绍了如何在表单的标题栏中轻松实现“最小化到托盘”按钮。 此文章附带的代码仅支持默认表单,并且不支持视觉样式。 欢迎改进代码,如有任何疑问,请与我联系。 如果您修复了上述限制,并向我发送副本,以便我更新本文,我将不胜感激。
背景
我目前正在开发的项目需要在后台运行。 因此,最好的方法是将该应用程序最小化到托盘栏,这样比在任务栏中更不容易打扰。 因此,我添加了一些代码,当用户通过标题栏中的“关闭”按钮关闭程序时,程序会最小化。 这可行了一段时间,效果很好。 但这是一种不好且不友好的方法。 我想要一个像 eMule 那样的“最小化到托盘”按钮 - 在研究之后,我注意到 C# 中还没有人这样做。
使用代码
- 步骤 1:将文件 'MinTrayBtn.cs' 添加到您的项目中,并使用 IDE 的设计器添加
NotifyIcon
组件。 为NotifyIcon
组件设置一个图标,并将可见性设置为false
。 - 步骤 2:现在,只需在 Windows
Form
类中声明一个MinTrayBtn
变量,以便在Form
构造函数中实例化对象。public class WinForm : System.Windows.Forms.Form { //... Some other code TyronM.MinTrayBtn mybutton; //... Some other code public WinForm() { mybutton = new TyronM.MinTrayBtn(this); } }
- 步骤 3:添加一个函数来捕获
MinTrayBtnClicked
事件并注册事件处理程序。 使用NotifyIcon
的Click
事件,然后再次显示Form
。public class WinForm : System.Windows.Forms.Form { //... Some other code TyronM.MinTrayBtn mybutton; //... Some other code public WinForm() { mybutton = new TyronM.MinTrayBtn(this); mybutton.MinTrayBtnClicked += new TyronM.MinTrayBtnClickedEventHandler(TrayBtn_clicked); } private void TrayBtn_clicked(object sender, EventArgs e) { this.Hide(); this.notifyIcon1.Visible = true; } private void notifyIcon1_Click(object sender, System.EventArgs e) { this.Show(); this.notifyIcon1.Visible = false; } }
关注点
标题栏是窗口的非客户端区域的一部分,由 Windows 处理,因此很难在那里添加一个按钮。 我必须自己绘制按钮并捕获各种鼠标事件,以克隆其他按钮的行为(此按钮的行为与其他按钮完全相同,或者至少应该如此:))。
修订
- 0.8.5
2005 年 7 月 11 日
- 更改:变量标题栏按钮大小(自动调整到系统指标)。
- 修复:窗口宽度更改时的绘制问题。
- 0.8
2005 年 4 月 20 日
- 文章创建。