So I created a window with a system tray icon. The window starts out minimized and will re-appear when the system tray Icon is clicked. However, it ONLY works when you click on the minimize button. If you click the red exit button the window disappears, the System Tray Icon remains(as it should) but when you click on it the program throws an error.
Cannot set Visibility or call Show, ShowDialog, or WindowInteropHelper.EnsureHandle after a Window has closed.
Here is the relevant code
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;
}
}