Visual C # GUI Designer - рекомендуемый способ удаления сгенерированного кода обработчика событий - PullRequest
3 голосов
/ 31 марта 2010

Я новичок в конструкторе Visual C #, так что это общий и довольно простой вопрос о том, как работать с дизайнером.

Когда мы, например, добавляем метку к форме, а затем дважды щелкаем по ней в конструкторе Visual C # (я использую Microsoft Visual C # 2008 Express Edition), происходит следующее:

  1. Дизайнер создает код в Form1.Designer.cs (для простоты предположим имена по умолчанию), чтобы добавить метку,
  2. , затем двойным щелчком добавит обработчик события label1_Click к метке в Form1.Designer.cs , используя следующий код

    this.label1.Click + = new System.EventHandler (this.label1_Click);

и добавляет метод-обработчик события к Form1.cs

private void label1_Click(object sender, EventArgs e)
{

}

Если я сейчас удалю метку, будет удален только код в Form1.Designer.cs, но метод label1_Click останется в Form1.cs, даже если он больше не используется. Но если я использую сброс в Properties-> Events для события Click из конструктора, даже метод label1_Click в Form1.cs будет удален.

1.) Разве это не немного противоречивое поведение?

2.) Каков рекомендуемый способ удаления такого сгенерированного кода обработчика событий?

3.) Каков наилучший «ментальный подход» / лучшая практика использования дизайнера?

Я бы подошел к этому с помощью умственного разделения так, чтобы Form1.cs был на 100% моей обязанностью, а с другой стороны, я вообще не касаюсь кода в Form1.Designer.cs. Это имеет смысл или нет? Так как иногда дизайнер удаляет что-н. из Form1.cs Я не уверен в этом.

Ответы [ 2 ]

2 голосов
/ 22 мая 2010

1) Да, это противоречиво.Немного.2) Я использовал гораздо более простой подход: просто сотрите весь код вашего дескриптора и попробуйте скомпилировать =>, компилятор покажет вам, где стереть назначение события.Несмотря на страшный взгляд, это действительно безопасно.3) Вот мои лучшие практики, которые я рекомендую, и как бы применяю их в своем отделе программного обеспечения: 3a) Переключитесь на WPF (запросите лучшие практики WPF отдельно; есть много других проблем);3b) НИКОГДА не разрешать Visual Studio автоматически генерировать код события (WPF или Windows.Forms);в случае аварии использовать (2) как можно скорее;3b) Для назначения событий используйте анонимную лямбду:

ByButton.Click += (source, evArg) => { SomeHandler(...); };

для v.2.0:

ByButton.Click += delegate(object source, EventArgs evArgs) { SomeHandler(...); };

Есть много преимуществ: ваши обработчики не обязаны использовать профиль определенного метода;Вы можете поместить весь код в анонимный обработчик, если он достаточно короткий, в лямбда-форме вам никогда не понадобится знать тип аргументов события ...

1 голос
/ 01 апреля 2010

Возможно, в Visual Studio есть элемент безопасности.

Например:

  • Добавить кнопку A и событие щелчка.
  • Ссылка на кнопку A событие нажатия другой кнопки B .
  • Удалить кнопку A
    • если бы код пошел, то кнопка B сломалась бы
    • если код остается, кнопка B продолжает работать.

Обычно я закомментирую любой код (обработчики событий), который ломается в файле designer.cs.

...