Open the window from the System Tray icon

So, I created a window with an icon in the system tray. The window starts with a minimum value and will be displayed when you click on the icon in the system tray. However, it ONLY works when you click the Minimize button. If you press the red exit button, the window will disappear, the system tray icon will remain (as it should), but when you click on it, the program displays an error message.

It is not possible to set the visibility or call Show, ShowDialog or WindowInteropHelper.EnsureHandle after closing the window.

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;

    }        
}
+5
source share
1 answer

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();
    }
+5

All Articles