2014-09-11 2 views
0

Я хочу поймать событие keyup родительской формы в usercontrol. Я использую ProcessCmdKey, но он просто дает мне событие keydown и не вызывает события keyup. Как мне это сделать?Как Catch Keyup Event в User Control?

Обновление: Я хочу поймать событие нажатия клавиши формы. потому что Control.KeyUp возникает, когда управление сфокусировано.

public partial class ExtendedButton : Button 
{ 
    const int WM_KEYDOWN = 0x100; 

    public ExtendedButton() 
    { 
     InitializeComponent(); 
    } 

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (msg.Msg == WM_KEYUP && keyData == (Keys.NumPad0)) 
     { 
      MessageBox.Show("hi"); 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 
+1

Почему так сложно? См. Http://stackoverflow.com/questions/18604633/catch-keyup-event-on-winform-c-sharp – user2864740

+0

@ user2864740 Я хочу использовать событие keyup в usercontrol не в форме – ArMaN

+1

Существует [Control.KeyUp] (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keyup(v=vs.110).aspx) .. все еще не уверен, для чего усложняется. – user2864740

ответ

1

Вы можете создать обработчик для родительской формы KeyUp в OnHandleCreated методе коррекции UserControl в.

Попробуйте этот код

Form parentForm = null; 
private void ParentForm_KeyUp(object sender, KeyEventArgs e) 
{ 
    MessageBox.Show("HI"); 
} 

protected override void OnHandleCreated(EventArgs e) 
{ 
    if (DesignMode) 
     return; 

    base.OnHandleCreated(e); 
    object parent = this; 
    while (true) 
    { 
     parent = ((Control)parent).Parent; 
     if (parent.GetType().BaseType.Name == "Form") 
      break; 
    } 
    parentForm = (Form)parent; 
    parentForm.KeyUp -= new KeyEventHandler(this.ParentForm_KeyUp); 
    parentForm.KeyUp += new KeyEventHandler(this.ParentForm_KeyUp); 
} 
+0

это не работает для меня! – ArMaN

+0

что происходит? Получение каких-либо ошибок? Установили ли свойство 'KeyPreview' вашей родительской формы значение true? – Shell

+0

yes Я установил свойство KeyPreview. нет ошибки, но событие keyup не возникает. – ArMaN