C#关闭时最小化到系统托盘

嗨在我的c#应用程序中,当表单关闭时,我正在尝试最小化应用程序到系统托盘。 这是我试过的代码。

public void MinimizeToTray() { try { notifyIcon1.BalloonTipTitle = "Sample text"; notifyIcon1.BalloonTipText = "Form is minimized"; if (FormWindowState.Minimized == this.WindowState) { notifyIcon1.Visible = true; notifyIcon1.ShowBalloonTip(500); this.Hide(); } else if (FormWindowState.Normal == this.WindowState) { notifyIcon1.Visible = false; } } catch(Exception ex) { MessageBox.Show(ex.Message); } } 

我正在调用形成结束事件的方法。 但问题是它不能最小化到托盘。 它只是关闭表格。

在Form Closing事件中写一个事件。

  private void Form1_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; Hide(); } 

并使用自定义菜单条写入要显示的通知图标。

e.Cancel = true; 代码将始终取消该事件,即使您关闭计算机,但这里有一个代码可以帮助您:

  private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.UserClosing) { myNotifyIcon.Visible = true; this.Hide(); e.Cancel = true; } } 

它将允许以programmaticaly方式关闭表单。

  namespace MinimizeTrayNotification { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void MinimzedTray() { notifyIcon1.Visible = true; notifyIcon1.Icon = SystemIcons.Application; notifyIcon1.BalloonTipText = "Minimized"; notifyIcon1.BalloonTipTitle = "Your Application is Running in BackGround"; notifyIcon1.ShowBalloonTip(500); } private void MaxmizedFromTray() { notifyIcon1.Visible = true; notifyIcon1.BalloonTipText = "Maximized"; notifyIcon1.BalloonTipTitle = "Application is Running in Foreground"; notifyIcon1.ShowBalloonTip(500); } private void Form1_Resize(object sender, EventArgs e) { if(FormWindowState.Minimized==this.WindowState) { MinimzedTray(); } else if (FormWindowState.Normal == this.WindowState) { MaxmizedFromTray(); } } private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { this.WindowState = FormWindowState.Normal; Form1 frm = new Form1(); frm.Show(); MaxmizedFromTray(); } private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) { this.WindowState = FormWindowState.Normal; } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.UserClosing) { e.Cancel = true; this.WindowState = FormWindowState.Minimized; this.ShowInTaskbar = false; this.Hide(); } } private void notifyIcon1_Click(object sender, EventArgs e) { this.WindowState = FormWindowState.Normal; notifyIcon1.BalloonTipText = "Normal"; notifyIcon1.ShowBalloonTip(500); } } 

}

您应该取消FormClosing事件,然后调用MinimizeToTray()函数。

这是通过FormClosingEventArgsCancel属性完成的。

另外,考虑在某些条件下使用bool 允许关闭Form ,例如,如果您使用的是File > Exit菜单或其他内容:

 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if(!allowClosing) { e.Cancel = true; MinimizeToTray(); } } 

关闭时将WindowState设置为Minimized

 private void Form1_FormClosing(Object sender, FormClosingEventArgs e) { e.Cancel = true; WindowState = FormWindowState.Minimized; } 

您需要使用FormClosing-Event。

 private void Form1_FormClosing(Object sender, FormClosingEventArgs e) { e.Cancel = true; MinimizeToTray(); } 

您可以处理FormClosing事件,例如micsoft Form Closing Event ,如下面的C#示例

 private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { // Determine if text has changed in the textbox by comparing to original text. if (textBox1.Text != strMyOriginalText) { // Display a MsgBox asking the user to save changes or abort. if (MessageBox.Show("Do you want to save changes to your text?", "My Application", MessageBoxButtons.YesNo) == DialogResult.Yes) { // Cancel the Closing event from closing the form. e.Cancel = true; // Call method to save file... } } }