[英]Open a window from System Tray icon
因此,我創建了一個帶有系統任務欄圖標的窗口。 窗口最小化,並在單擊系統任務欄圖標時重新出現。 但是,它僅在您單擊最小化按鈕時才起作用。 如果單擊紅色的退出按鈕,該窗口將消失,系統托盤圖標將保留(應有的狀態),但是當您單擊它時,程序將引發錯誤。
窗口關閉后,無法設置可見性或調用Show,ShowDialog或WindowInteropHelper.EnsureHandle。
這是相關的代碼
public partial class MainWindow : Window
{
public static NotifyIcon icon;
List<string> food = new List<string>();
bool on = false;
public MainWindow()
{
InitializeComponent();
food.Add("Breakfast");
food.Add("Soups");
food.Add("Vegetables");
food.Add("Crab roll");
food.Add("Sushi");
food.Add("Egg rolls");
food.Add("Salad");
MainWindow.icon = new NotifyIcon();
window1.WindowState = WindowState.Minimized;
icon.Icon = new System.Drawing.Icon("favicon.ico");
icon.Visible = true;
icon.Click += new EventHandler(icon_Click);
icon.BalloonTipClicked += new EventHandler(icon_BalloonTipClicked);
icon.DoubleClick += new EventHandler(icon_DoubleClick);
icon.BalloonTipClosed += new EventHandler(icon_BalloonTipClosed);
icon.MouseMove += new System.Windows.Forms.MouseEventHandler(icon_MouseMove);
StateChanged += new EventHandler(MainWindow_StateChanged);
}
void icon_BalloonTipClicked(object sender, EventArgs e)
{
this.Show(); //This is where the error is
window1.WindowState = WindowState.Normal;
}
void icon_DoubleClick(object sender, EventArgs e)
{
this.Show(); //This is where the error is
window1.WindowState = WindowState.Normal;
}
void icon_BalloonTipClosed(object sender, EventArgs e)
{
on = false;
}
void icon_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (!on)
{
icon.BalloonTipText = "";
foreach(string item in food){
if (!item.Contains("Breakfast") && !item.Contains("Soups") && !item.Contains("Vegetables"))
{
icon.BalloonTipText += item+"\n";
}
}
icon.ShowBalloonTip(10);
on = true;
}
}
void MainWindow_StateChanged(object sender, EventArgs e)
{
if (window1.WindowState == WindowState.Minimized)
{
this.Hide();
}
}
private void icon_Click(Object sender, EventArgs e)
{
icon.BalloonTipText = "";
foreach (string item in food)
{
if (!item.Contains("Breakfast") && !item.Contains("Soups") && !item.Contains("Vegetables"))
{
icon.BalloonTipText += item + "\n";
}
}
icon.ShowBalloonTip(10);
on = true;
}
}
攔截窗口的Closing
事件,然后取消它(這將阻止窗口關閉)-然后隱藏窗口:
public MainWindow()
{
// Subscribe to closing event (when X is pressed)
this.Closing += MainWindow_Closing;
InitializeComponent();
}
void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// Prevent window from closing
e.Cancel = true;
// Hide window
this.Hide();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.