Возможность реализации свертывания в лоток в C # в атрибуте - PullRequest
0 голосов
/ 11 ноября 2009

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

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

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

Ответы [ 4 ]

2 голосов
/ 11 ноября 2009

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

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);
    }
}
1 голос
/ 11 ноября 2009

Этого можно добиться проще с помощью наследования форм, а не атрибутов, и что-то еще придется интерпретировать атрибуты во время выполнения для достижения желаемого эффекта.

С помощью наследования вы можете просто настроить класс так, чтобы он вел себя так, как вам нравится, и, по сути, иметь возможность подписки или отказа (даже используя для этого атрибут).

0 голосов
/ 11 ноября 2009

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

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

0 голосов
/ 11 ноября 2009

Это, конечно, возможно, но я бы предложил переопределить метод close () формы и просто добавить туда минимизирующий код. Это просто, логично и легко для будущих разработчиков.

Пример кода для достижения этой цели:

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

и

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...