系统托盘图标

时间:2011-06-16 08:44:03

标签: c#

好的,首先我刚开始使用C#,所以我不是那里最熟练的程序员。好的,所以这是我的问题,对你们来说可能看起来很愚蠢;)

我有一个简单的应用程序,朋友邀请我这样做。到目前为止,我已经管理了一些谷歌,但我坚持这一点。该应用程序运行良好,最小化到系统托盘,并从系统托盘最大化,这是好的。但是,当我从该应用程序打开第二个表单时,它会在系统托盘中创建另一个图标,并在每次打开另一个表单时开始复制。所以最终我有很多图标,所有图标都是主窗体的单独实例。系统托盘事件

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;
}

打开表格:

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

关闭它:

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

如何将所有表单映射到系统托盘中的相同图标?

2 个答案:

答案 0 :(得分:2)

您需要一个可以访问的全局托盘图标。通过使用在类的不同实例中保持不变的静态变量来执行此操作。

然后,如果你想:

  • 打开一个表单:在变量中保留对最新表单的引用并打开它。
  • 打开所有最小化的表单:遍历每个表单并再次打开它们。

答案 1 :(得分:0)

如果我做对了,你想只保留一个单个应用程序实例。在这种情况下,您的标题有点误导,因为您的问题与托盘图标或多个表单无关。

另一方面,如果您的应用中确实有主要表单,则会打开第二个表单(会创建一个托盘图标),在这种情况下,您只需确保您的第二个表单只实例化一次:

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