Возможность реализации свертывания в лоток в C# в атрибуте
Атрибуты потрясающие. Но возможно ли создать класс атрибутов C#, который, будучи помечен, сводит ваше приложение к системной области?
Технически, атрибут должен был бы быть помещен в класс главной формы. Как только пользователь нажимает кнопку X, эта форма не должна заканчиваться, но должна быть свернута на панель задач. Значок для минимизации также должен быть указан в атрибуте.
Это технически возможно? Я не могу найти информацию о перезаписи кода класса из атрибута этого класса. (Вам нужно как минимум перезаписать один метод, чтобы минимизировать его в трей.)
4 ответа
Почему бы просто не сделать это:
class TrayForm : Form
{
NotifyIcon notifyIcon = new NotifyIcon();
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (e.CloseReason != CloseReason.WindowsShutDown && e.CloseReason != CloseReason.ApplicationExitCall)
{
e.Cancel = true;
this.Hide();
this.notifyIcon.Visible = true;
}
base.OnFormClosing(e);
}
protected override void OnSizeChanged(EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
this.Hide();
this.notifyIcon.Visible = true;
}
base.OnSizeChanged(e);
}
}
Этого можно добиться проще с помощью наследования форм, а не атрибутов, и что-то еще придется интерпретировать атрибуты во время выполнения для достижения желаемого эффекта.
С помощью наследования вы можете просто настроить класс так, чтобы он вел себя так, как вам нравится, и, по сути, иметь возможность отказа или отказа (даже используя для этого атрибут).
Это невозможно с обычным Form
учебный класс. Но возможно создать собственный класс, который наследует от Form
а также поддерживает такой атрибут. Но это только усложнит ненужные вещи, вероятно, было бы лучше добавить MinimizeToTray
свойство этого класса.
(как в примере с PhilipW, но с добавленным свойством для управления поведением)
Это, конечно, возможно, но я бы предложил переопределить метод close() формы и просто поместить туда минимизирующий код. Это просто, логично и легко для будущих разработчиков.
Пример кода о том, как этого добиться, находится по адресу:
http://www.dreamincode.net/code/snippet2660.htm
а также