2013-05-23 3 views
0

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

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     const int WM_KEYDOWN = 0x100; 
     const int WM_SYSKEYDOWN = 0x104; 

     if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN)) 
     { 
      switch (keyData) 
      { 
       case Keys.Down: 
       button4_Click(sender, e); //error: sender and e does not exist in the current context 
       break; 
      } 
     } 

     return base.ProcessCmdKey(ref msg, keyData); 
    } 
+0

Вы используете WPF, WinForms? –

+0

Извините за это ... Я использую Winforms – electricalbah

ответ

1

Почему не двигаются button4_Click код другим способом, как ProcessSomething() и обрабатывать там. Тогда просто изменить

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    const int WM_KEYDOWN = 0x100; 
    const int WM_SYSKEYDOWN = 0x104; 

    if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN)) 
    { 
     switch (keyData) 
     { 
      case Keys.Down: 
      ProcessSomething(); 
      break; 
     } 
    } 

    return base.ProcessCmdKey(ref msg, keyData); 
} 

вы можете запустить button4_Click метод, передавая аннулирует к нему, но ИМО это не элегантно стрелять события, как это.

+1

Согласен. Обработка обработчиков событий в коде пользователя как функции - это злоупотребление. –

+0

Спасибо gzaxx. Просто, чтобы очистить Грант, я новичок в программировании. Так не нормально ли вызывать событие как функцию? каковы последствия? Я использовал их в своей программе – electricalbah

0

Вызов button4 click передавая себя в качестве отправителя и новый System EventArgs в качестве второго параметра:

button4_Click(button4, new System.EventArgs()); 
2

Попробуйте это:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    const int WM_KEYDOWN = 0x100; 
    const int WM_SYSKEYDOWN = 0x104; 

    if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN)) 
    { 
     switch (keyData) 
     { 
      case Keys.Down: 
      button4_Click(null, null); 
      break; 
     } 
    } 

    return base.ProcessCmdKey(ref msg, keyData); 
} 
Смежные вопросы