2011-01-04 6 views
11

pensé que resolvió este problema por mí mismo, sino que se volvió contra mi solicitud así que aquí va:no puede detectar un acceso directo Ctrl + Tecla de eventos keydown cada vez que hay un cuadro de texto de sólo lectura con el foco

tengo el controlador de eventos siguiente keydown registrado en un formulario con un par de cuadros de texto con discapacidad y de sólo lectura y que son sólo accesos sencillos para los botones:

private void AccountViewForm_KeyDown(object sender, KeyEventArgs e) 
    { 
     //e.SuppressKeyPress = true; 
     //e.Handled = true; 
     if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.E && !isInEditMode) 
      btnEditMode_Click(sender, e); 
     if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.S && isInEditMode) btnEditMode_Click(sender, e); 
     if (e.KeyCode == Keys.Escape) btnCancel_Click(sender, e); 
     if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.W) Close(); 
    } 

forma tiene TeclaDePresentaciónPreliminar se define como true, pero cada vez que un cuadro de texto de sólo lectura tiene el foco y presiono Ctrl + E no puedo hacer que "Control.ModifierKeys == Keys.Control" y "e.KeyCode == Keys.E" sean ambos verdaderos al mismo tiempo. Lo que es realmente extraño es que Ctrl + W funciona. Alguien tiene alguna idea de qué diablos está pasando? :(

+0

Me doy cuenta de que esto es viejo. Su código hace referencia a "Control.ModifierKeys". Probablemente debería ser "e.Modifiers". – Metro

Respuesta

18

Según this question y this one, se ve como una forma más general para manejar los atajos de teclado es para anular el método ProcessCmdKey():

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
    if (keyData == (Keys.Control | Keys.F)) { 
    MessageBox.Show("What the Ctrl+F?"); 
    return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 

Ha considerado el uso Alt +E y Alt + S y acaba de establecer la propiedad mnemónica para sus botones? Eso parece funcionar bien para mí, y es más fácil de configurar.

+0

bueno esa es una mejor manera de manejarlo bien, no más comportamiento extraño. gracias – francis

+0

Esto también se puede hacer si se anula la función DefWndProc. if (Control.ModifierKeys == (Keys.Control | Keys.F)) { // Lo que } – David

Cuestiones relacionadas