Возможность реализации функции сворачивания в трей в C # в атрибуте

StackOverflow https://stackoverflow.com/questions/1716719

  •  19-09-2019
  •  | 
  •  

Вопрос

Атрибуты - это потрясающе.Но возможно ли создать класс атрибутов C #, который при пометке заставляет ваше приложение сворачиваться в системный трей?

Технически, атрибут должен был бы быть помещен в класс основной формы.Как только пользователь нажимает на кнопку X, эта форма не должна завершаться, а должна сворачиваться до панели задач.Значок для сворачивания также должен быть указан в атрибуте.

Возможно ли это технически?Я не могу найти никакой информации о перезаписи кода класса из атрибута, размещенного в этом классе.(Вам нужно, по крайней мере, перезаписать один метод, чтобы свести его к минимуму в трее.)

Это было полезно?

Решение

Почему бы просто не сделать это:

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 close() и просто вставить туда некоторый минимизирующий код.Это просто, логично, и будущим разработчикам легко за этим следить.

Некоторый пример кода о том, как этого добиться, находится по адресу:

http://www.dreamincode.net/code/snippet2660.htm

и

http://www.dreamincode.net/forums/showtopic116283.htm

Это невозможно с обычным Form класс.Но можно создать собственный класс, который наследуется от Form а также поддерживает такой атрибут.Но это только сделало бы ситуацию ненужно сложной, вероятно, было бы лучше добавить MinimizeToTray свойство для этого класса.

(как в примере, предоставленном PhilipW, но с добавленным свойством для управления поведением)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top