создание статического события btn_Click - PullRequest
1 голос
/ 23 декабря 2009

Существует частная пустота btnContBalloon_Click (отправитель объекта, EventArgs e). Могу ли я сделать это статическим, потому что я хочу вызвать это из статического метода, но я не могу.

Ответы [ 3 ]

5 голосов
/ 23 декабря 2009

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

Регистрация обработчика события для статического события требует кода, скажем, в обработчике события FormClosing, который явно отменяет регистрацию обработчика. Вы можете увидеть это явно задокументировано в статье MSDN Library для класса SystemEvents, одного из немногих примеров класса в .NET Framework, который имеет статические события.

Лучший подход - отслеживать экземпляр формы, чье событие Click кнопки должно быть активировано. Как то так:

  public partial class Form1 : Form {
    public static Form1 MainForm { get; private set; }
    public Form1() {
      InitializeComponent();
      MainForm = this;
    }
    public void RunClickMethod() {
      button1.PerformClick();
    }
    protected override void OnFormClosing(FormClosingEventArgs e) {
      MainForm = null;
      base.OnFormClosing(e);
    }
  }

Что позволяет клиентскому коду сделать это:

  Form1.MainForm.RunClickMethod();
2 голосов
/ 23 декабря 2009

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

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

1 голос
/ 23 декабря 2009

В общем: Да, обработчики событий могут быть сделаны статическими. Но применяются нормальные правила для статических методов.

Но часто автоматически генерируемый код сталкивается с проблемами, когда вы изменяете автоматически сгенерированный обработчик событий на статический. Я бы сделал это только с ручными обработчиками событий.

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