Keenan Molver
Keenan Molver

Reputation: 25

System Tray Icon

Okay firstly I just started C# so I'm not exactly the most skilled programmer out there. Okay so here's my problem that may seem stupid to you guys ;)

I have a simple enough app that a friend asked me to do. So far I have managed with a bit of Google but I'm stuck with this. The app runs fine and minimizes to the system tray and maximizes from the system tray which is good. However, when I open a second form from that application it creates another icon in the system tray and starts duplicating every time I open another form. So eventually I have lots of icons and all of them are seperate instances of the main form. System Tray events

private void notifyIcon_systemTray_MouseDoubleClick(object sender, MouseEventArgs e)
{
    if (FormWindowState.Minimized == WindowState)
    {
        Show();
        WindowState = FormWindowState.Normal;
    }
}
private void CronNecessityForm_Resize(object sender, EventArgs e)
{
    notifyIcon_systemTray.Visible = true;
    if (FormWindowState.Minimized == WindowState)
        Hide();

}
private void restoreContextMenuItem_Click(object sender, EventArgs e)
{
    Show();
    WindowState = FormWindowState.Normal;
}

To open the Form:

private void preferencesToolStripMenuItem_Click(object sender, EventArgs e)
{
    CronPreferences.formPreferences CronPreferences = new CronPreferences.formPreferences();
    CronPreferences.Show();
}

Close it:

private void button2_Click(object sender, EventArgs e)
{
     this.Hide();
}

How can I have all Forms map to the same icon in the System Tray?

Upvotes: 0

Views: 2358

Answers (2)

foxy
foxy

Reputation: 7672

You will need a single global tray icon that they all access. Do this by using a static variable that stays the same throughout different instances of the class.

Then, if you want to:

  • Open one form: keep a reference to the latest form in a variable and open it.
  • Open all minimised forms: iterate through each form and open them again.

Upvotes: 2

vgru
vgru

Reputation: 51302

If I got it right, you want to keep only a single instance of your application running. In that case, your title is a bit misleading since your problem has nothing to do with tray icons or multiple forms.

On the other hand, if you really have a main form in your app, which opens the second form (which creates a tray icon), in that case you simply need to make sure your second form is instantiated only once:

public class MainForm
{
    private SecondForm _secondForm;

    public void OpenSecondForm()
    {
         // create it only once
         if (_secondForm == null)
             _secondForm = new SecondForm();

         // otherwise just show it
         _secondForm.Show();
    }
}

Upvotes: 0

Related Questions