2013-02-20 4 views
0

здесь: http://msdn.microsoft.com/en-us/library/hkkb40tf(v=VS.90).aspx, он говорит, что для вызова события нажатия кнопки щелкните кнопку от другой кнопки, вы можете/должны сделать это таким образом:Каков правильный способ вызова события нажатия кнопки?

button1.PerformClick(); 

Однако, в моей ситуации (VS 2003. NET 1.1), это не компилируется (правда, ссылка выше указывает VS 2008, но у нее нет ссылки на соответствующую информацию для предыдущих версий, как это обычно делает msdn).

компилируется:

private void btnPrint_Click(object sender, System.EventArgs args) 
{ 
    if (this.recordChanged) 
    { 
     //btnSave.Click(); 
     btnSave_Click(sender, args); 
    } 
    . . . 

... но я не знаю, если это способ сделать это.

+0

Что такое ошибка компиляции? –

+1

WinForms? WPF? ASP.NET? – itsme86

+0

Извините; Я изменил теги сейчас (Windows CE)/WinForms, так сказать. Ошибка компиляции: «System.Windows.Forms.Button» не содержит определения для «PerformClick» –

ответ

6

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

События «Faking», вызвав методы обработчика событий, являются уродливыми и могут привести к ошибкам (любой программист, модифицирующий обработчик событий в будущем, может не знать, что он может быть вызван в разных условиях, чем ожидалось/задокументировано, что может вызвать опция печати будет вести себя странно или даже сбой при попытке выполнить операцию сохранения)

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

+0

+1, этого недостаточно, чтобы подчеркнуть! Еще одна причина делать семантически правильную вещь - избегать WTF во время будущего обслуживания и изменений. – Adam

+0

Хорошая точка; Обычно я делаю это при кодировании чего-то нового, но, поддерживая существующее приложение и беря инструкции для добавления этой функции немного слишком буквально, я отклоняюсь от своей обычной привычки. –

+0

Это правильное решение, не полагайтесь на своих обработчиков GUI для выполнения своей бизнес-логики. Найдите способ прямого вызова бизнес-логики. – Alan

0

сделаю btnSave.Click(sender, args);. Вот страница на MSDN: http://msdn.microsoft.com/en-us/library/aa645739(v=VS.71).aspx

+0

Вы не можете сделать это, когда событие объявлено как событие, так как 'event' ограничивает все, кроме' + = 'и' - = 'закрытой областью. –