Почему имена событий управления формой меняются, когда код копируется из другого проекта?

Сценарий:

  • У меня есть кнопка с именем X в проекте A
  • Одно из событий для X следующее:

    private void X_KeyDown(object sender, KeyEventArgs e)
    {//if the user presses Ctrl + V 
        if (e.KeyCode == Keys.Control && e.KeyCode == Keys.V)
        {
          MessageBox.Show("hello");  
        }
    }
    
  • Теперь я создал новый проект B и добавил кнопку в форму, а также назвал ее X. Затем я скопировал приведенный выше код в Form1.cs.

Вопрос: если я перехожу к форме B и выбираю кнопку, а затем дважды щелкаю событие KeyDown, оно не переходит к коду, который я скопировал, а создает следующее. Почему ?

private void X_KeyDown_1(object sender, KeyEventArgs e)
{

}

person whytheq    schedule 19.07.2012    source источник


Ответы (1)


Потому что вы забыли скопировать фактическую привязку события, которая объявлена ​​в вашем файле Form1.Designer.cs. Что-то вроде

X.Click += new System.KeyDownEventHandlerEtcEtc;

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

Чтобы преодолеть это, вы можете вручную установить событие Click в дизайнере на указанный скопированный обработчик событий. Или любой обработчик событий с соответствующей сигнатурой.

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

person J. Steen    schedule 19.07.2012
comment
Я считаю, что вы также можете указать имя метода для обработки события в VS. - person David B; 19.07.2012