Есть основная форма, которую я могу сворачивать-разворачивать в(из) области уведомлений(трей).
private void Form1_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
notifyIcon1.Visible = true;
notifyIcon1.ShowBalloonTip(3000);
this.ShowInTaskbar = false;
}
}
public void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.WindowState = FormWindowState.Normal;
this.ShowInTaskbar = true;
notifyIcon1.Visible = false;
}
Стоит задача из другого класса "вытаскивать" программу из трея.
Пробую вот так, но почему то оно не отображается
Form1 frm = new Form1();
frm.WindowState = FormWindowState.Normal;
frm.ShowInTaskbar = true;
frm.notifyIcon1.Visible = false;
frm.TopMost = true;
Я вам предлагаю разбить логику на отдельные части и работать с их ссылками, а не созданием объекта отдельно.
К примеру мы создадим новый класс, который будет отвечать исключительно за работу с NotifyIcon
, я назову его NotifyHelper
. В этом классе мы пропишем стартовые значения (иконку) и методы вывода нужных уведомлений, то есть получаем что то вроде этого:
public class NotifyHelper
{
NotifyIcon notify;
public NotifyHelper(NotifyIcon notify)
{
this.notify = notify;
this.notify.Icon = SystemIcons.Application;
}
public NotifyHelper Visible(bool visible = true)
{
notify.Visible = visible;
return this;
}
public void Show(string title, string text, int timeout = 3000, ToolTipIcon icon = ToolTipIcon.Info)
{
if (notify == null) return;
notify.ShowBalloonTip(timeout, title, text, icon);
}
public void ShowWarn(string text, string title = "Внимание") =>
Show(title, text, icon: ToolTipIcon.Warning);
public void ShowInfo(string text, string title = "Информация") =>
Show(title, text);
}
Теперь у стартовой формы пропишем инициализацию данного класса, я лично сделаю прям в конструкторе:
NotifyHelper NotifyHelper;
public Form1()
{
InitializeComponent();
NotifyHelper = new NotifyHelper(notifyIcon1).Visible();
}
Все, теперь мы можем с этим классом работать где угодно, достаточно передать ссылку.
Для примера я создам на первой форме две кнопки, при нажатие первой мы выведем обычное уведомление, а при нажатие 2-й мы откроем 2-ю форму.
Первый обработчик пусть вызывает .ShowInfo()
из нашего вспомогательного класса:
private void Button1_Click(object sender, EventArgs e) =>
NotifyHelper.ShowInfo("Объявление из первого окна!");
А второй пусть открывает новую форму, передавая через конструктор NotifyHelper
:
private void Button2_Click(object sender, EventArgs e) =>
new Form2(NotifyHelper).Show();
Все, с первой формой закончили, осталось подготовить чуть вторую:
Принимаем через конструктор вспомогательный класс:
NotifyHelper NotifyHelper;
public Form2(NotifyHelper notifyHelper)
{
InitializeComponent();
NotifyHelper = notifyHelper;
}
Ну и для примера добавим одну кнопку на форуму и в ее обработчике клика вызываем нужный метод из вспомогательного класса:
private void Button1_Click(object sender, EventArgs e) =>
NotifyHelper.ShowWarn("Произошла ошибка!");
Вот собственно и все.
Мы "завернули" NotifyIcon
в свой класс, который отвечает только за него и дальше просто вызываем нужные методы, не затрагивая всю форму и что то еще. Вам остается снабдить класс тем функционалом, который нужен (сменить иконку в трее, показать может другое уведомление, вывести окно из трея и так далее).
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Я нашёл тут ответ на мой вопрос, но он не помогУ меня не видит класс WaypointEditor в другом классе
При попытке работы с массивом OnlyGreatMarks в последнем методе происходит ошибка:
Подскажите, пожалуйста, как в ASPNET CORE MVC сделать так, чтобы по вводу нужного числа в текстовом поле во view, появлялось количество элементов (текстовых...