C#-WinForm設定托盤程式
阿新 • • 發佈:2019-01-08
背景
現在很多程式都有這樣的托盤程式
窗體關閉時,並不真正關閉程式,只是工作列不顯示該應用程式,在右下側托盤裡顯示;
雙擊托盤,窗體還原;
右擊窗體,出現托盤選單,實現最小化,最大戶,還原,退出等。
這樣的功能C#winform怎樣實現呢 ?
實現
WinForm中托盤選單由NotifyIcon控制元件來實現,右鍵選單由contextMenuStrip來實現,我們將二者相關聯,即可實現我們所期望功能的托盤程式。
新增控制元件
我們在需要托盤的form介面上拖入NotifyIcon和一個ContextMenuStrip控制元件。
設定控制元件資訊
設定控制元件的屬性為我們期望的功能,
如本例中NotifyIcon控制元件名NAME為“mainNotifyIcon”,ContextMenuStrip控制元件名NAME為”mainNotifyContextMenuStrip”)
Icon為托盤圖示,Text托盤顯示文字,ContextMenuStrip右鍵選單(退出),設定退出單擊事件,我們將mainNotifyIcon的ContextMenuStrip屬性設定為mainNotifyContextMenuStrip,即可實現該托盤與右鍵選單的關聯,在托盤上右鍵即出現右鍵選單
我們開始新增右鍵選單的各個選項,比如:最小化,最大化,還原,退出等
實現事件關聯
新增主窗體關閉事件(FormClosing)
// 只有Form_Closing事件中 e.Cancel可以用。
// 你的是Form_Closed事件。 Form_Closed事件時視窗已關了 ,Cancel沒用了;
// Form_Closing是視窗即將關閉時詢問你是不是真的關閉才有Cancel事件
private void MainWindow_FormClosing(object sender, FormClosingEventArgs e)
{
// 注意判斷關閉事件reason來源於窗體按鈕,否則用選單退出時無法退出!
if (e.CloseReason == CloseReason.UserClosing)
{
//取消"關閉視窗"事件
e.Cancel = true ; // 取消關閉窗體
//使關閉時視窗向右下角縮小的效果
this.WindowState = FormWindowState.Minimized;
this.mainNotifyIcon.Visible = true;
//this.m_cartoonForm.CartoonClose();
this.Hide();
return;
}
}
這樣我們就實現了單擊關閉時,不真正關閉程式,而是將主介面隱藏HIDE掉,同時開始顯示托盤選單。
實現雙擊托盤開啟主程式
// 新增托盤程式
// 版本更新自1.0.1
private void mainNotifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (this.Visible)
{
this.WindowState = FormWindowState.Minimized;
this.mainNotifyIcon.Visible = true;
this.Hide();
}
else
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
this.Activate();
}
}
右鍵選單實現最小化最大化還原和退出
// 新增托盤程式右鍵選單項
// 版本更新自1.0.1
// 最小化
// 新增日期 -- 2015-07-29 21:40
private void toolStripMenuItemMinimize_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
this.mainNotifyIcon.Visible = true;
this.Hide();
}
// 新增托盤程式右鍵選單項
// 版本更新自1.0.1
// 最大化
// 新增日期 -- 2015-07-29 21:41
private void toolStripMenuItemMaximize_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Maximized;
this.mainNotifyIcon.Visible = true;
this.Show();
}
// 新增托盤程式右鍵選單項
// 版本更新自1.0.1
// 還原
// 新增日期 -- 2015-07-29 21:43
private void toolStripMenuItemNormal_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Normal;
this.mainNotifyIcon.Visible = true;
//this.m_cartoonForm.CartoonShowNormal();
this.Show();
}
// 新增托盤程式右鍵選單項
// 版本更新自1.0.1
// 退出
// 新增日期 -- 2015-07-29 21:44
private async void toolStripMenuItemQuit_Click(object sender, EventArgs e)
{
if (MessageBox.Show("你確定要退出?", "系統提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
{
this.mainNotifyIcon.Visible = false;
this.Close();
this.Dispose();
System.Environment.Exit(System.Environment.ExitCode);
}
}
}