свернуть приложение в системный трей
У меня есть приложение Windows forms, работающее на C# и Visual Studio 2010.
Как я могу свернуть свое приложение в системный трей (не Панель задач), а затем вернуть его при двойном щелчке в системном трее? есть идеи? кроме того, как я могу сделать какое-то меню в значке в системном трее, и когда я нажимаю на него правой кнопкой мыши, он показывает меню, такое как Login, Disconnect, Connect, что-то в этом роде. Кроме того, есть ли какие-либо методы, чтобы показать, как воздушный шар выскакивает из системного трея?
PS: я уже добавил notifyIcon, но я не знаю, как его использовать.
9 ответов:
обрабатывать событие изменения размера формы. В этом обработчике вы переопределяете основные функциональные возможности события Resize для минимизации формы до системном трее, а не на панели задач. Это можно сделать, выполнив ниже в обработчике событий изменения размера формы: проверьте, является ли установлено свойство WindowState формы в FormWindowState.Свернутый. Если да, скройте свою форму, включите объект NotifyIcon и покажите воздушный шар наконечник, который показывает некоторую информацию. Как только WindowState становится FormWindowState.Нормальный, отключите объект NotifyIcon, установив его Свойство Visible имеет значение false. Теперь вы хотите, чтобы окно снова появилось, когда вы дважды щелкните на объекте NotifyIcon на панели задач. Для этого, обработайте событие Mousedoubleclick NotifyIcon. Вот, вы показываете форма использования() метод.
private void frmMain_Resize(object sender, EventArgs e) { if (FormWindowState.Minimized == this.WindowState) { mynotifyicon.Visible = true; mynotifyicon.ShowBalloonTip(500); this.Hide(); } else if (FormWindowState.Normal == this.WindowState) { mynotifyicon.Visible = false; } }
Я нашел это, чтобы выполнить весь раствор. Ответ выше не удается удалить окно из панели задач.
private void ImportStatusForm_Resize(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Minimized) { notifyIcon.Visible = true; notifyIcon.ShowBalloonTip(3000); this.ShowInTaskbar = false; } } private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e) { this.WindowState = FormWindowState.Normal; this.ShowInTaskbar = true; notifyIcon.Visible = false; }
также рекомендуется задать следующие свойства элемента управления notify icon с помощью конструктора форм.
this.notifyIcon.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info; //Shows the info icon so the user doesn't think there is an error. this.notifyIcon.BalloonTipText = "[Balloon Text when Minimized]"; this.notifyIcon.BalloonTipTitle = "[Balloon Title when Minimized]"; this.notifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon.Icon"))); //The tray icon to use this.notifyIcon.Text = "[Message shown when hovering over tray icon]";
Я бы пошел с
private void Form1_Resize(object sender, EventArgs e) { if (FormWindowState.Minimized == this.WindowState) { notifyIcon1.Visible = true; notifyIcon1.ShowBalloonTip(500); this.Hide(); } else if (FormWindowState.Normal == this.WindowState) { notifyIcon1.Visible = false; } } private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { this.Show(); this.WindowState = FormWindowState.Normal; }
попробуй такое
private void Form1_Load(object sender, EventArgs e) { notifyIcon1.BalloonTipText = "Application Minimized."; notifyIcon1.BalloonTipTitle = "test"; } private void Form1_Resize(object sender, EventArgs e) { if (WindowState == FormWindowState.Minimized) { ShowInTaskbar = false; notifyIcon1.Visible = true; notifyIcon1.ShowBalloonTip(1000); } } private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { ShowInTaskbar = true; notifyIcon1.Visible = false; WindowState = FormWindowState.Normal; }
Это метод, который я использую в своих приложениях, он довольно прост и понятен, но я рад дать более подробную информацию в ответ на ваши комментарии.
public Form1() { InitializeComponent(); // When window state changed, trigger state update. this.Resize += SetMinimizeState; // When tray icon clicked, trigger window state change. systemTrayIcon.Click += ToggleMinimizeState; } // Toggle state between Normal and Minimized. private void ToggleMinimizeState(object sender, EventArgs e) { bool isMinimized = this.WindowState == FormWindowState.Minimized; this.WindowState = (isMinimized) ? FormWindowState.Normal : FormWindowState.Minimized; } // Show/Hide window and tray icon to match window state. private void SetMinimizeState(object sender, EventArgs e) { bool isMinimized = this.WindowState == FormWindowState.Minimized; this.ShowInTaskbar = !isMinimized; systemTrayIcon.Visible = isMinimized; if (isMinimized) systemTrayIcon.ShowBalloonTip(500, "Application", "Application minimized to tray.", ToolTipIcon.Info); }
при нажатии на изображение в системном трее, вы можете проверить, если кадр виден, а затем вы должны установить Visible = true или false