好的,首先我刚开始使用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();
}
如何将所有表单映射到系统托盘中的相同图标?
答案 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();
}
}