簡體   English   中英

系統托盤圖標

[英]System Tray Icon

好吧,首先我剛開始使用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();
}

如何將所有表單映射到系統托盤中的相同圖標?

您將需要一個他們都可以訪問的單個全局托盤圖標。 通過使用在類的不同實例中保持不變的靜態變量來執行此操作。

然后,如果你想:

  • 打開一個表單:在變量中保留對最新表單的引用並打開它。
  • 打開所有最小化的表單:遍歷每個表單並再次打開它們。

如果我做對了,你只想保持應用程序一個實例運行。 在這種情況下,您的標題有點誤導,因為您的問題與托盤圖標或多個表單無關。

另一方面,如果您的應用程序中確實有一個主窗體 ,它會打開第二個窗體 (創建托盤圖標),在這種情況下,您只需要確保第二個窗體僅實例化一次:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM