2011-06-16 203 views
0

好吧,首先,我刚开始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

那究竟是什么问题? – 2011-06-16 08:46:10

+0

我没看到这个问题。这种行为是由你的设计取而代之的。 – Numenor 2011-06-16 08:46:22

+0

抱歉,我现在看到它看起来有点模糊。我该如何阻止它创建更多像现在这样的图标。它应该在程序加载时创建一个它。我不希望它每次打开另一个表单时创建更多 – 2011-06-16 08:52:41

回答

2

您将需要一个全局托盘图标,它们都可以访问。通过在类的不同实例中使用一个静态变量来实现这一点。

然后,如果你想:

  • 打开一个表格:保持在一个变量的最新形式的引用,并打开它。
  • 打开所有最小化形式:遍历每个表单并再次打开它们。
+0

我喜欢这个解决方案,但OP没有说明是否所有打开的表格是相同的类/继承类... – 2011-06-16 09:25:47

+1

@ach无论哪种方式,静态变量将是无论类实例如何,无论它在何处实现,在任何视图或控制器级别(尽管在视图模型中这样做可能会破坏您拥有的任何MVC框架) – foxy 2011-06-16 09:28:24

+0

好点,我喜欢。 – 2011-06-16 09:47:58

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

我不认为他想要单个实例,而是具有一个托盘图标的多个表单。 – 2011-06-16 09:23:25

+0

@ach。是的,这是真的。我可以使用Groo的代码,然后设置通知图标不可见,但多数民众赞成采取快捷方式 – 2011-06-16 09:43:28