开发者

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?


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.


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.

  • Code Project: A Single Instance Application which Minimizes to the System Tray when Closed

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜