2011-12-21 16 views
5

que estoy experimentando algunas dificultades con las teclas mnemotécnicas en Windows Forms:acelerador (clave mnemotécnica) se ejecutan sin necesidad de pulsar la tecla ALT

Basta con tener un formulario con un botón, que utiliza ALT + s como el acelerador:

this.searchButton = new System.Windows.Forms.Button(); 
this.searchButton.Text = "&search"; 

La acción del botón se ejecuta simplemente presionando "s" (sin presionar la tecla ALT). He comprobado algunas otras aplicaciones, y las acciones del acelerador solo se ejecutan cuando se presiona la tecla ALT.

  • ¿Es esto un problema de .NET?
  • ¿Cómo podría solucionar este problema?

Gracias de antemano.

+0

¿Qué versión de .NET estás usando? – leanne

+0

@leanne: Es .NET 2.0, pero también he probado .NET 3 y .NET 3.5 y .NET 4.0 también están fallando. –

+0

+1 porque acabo de experimentar el mismo problema y esta pregunta es útil. Pero técnicamente es una "tecla mnemotécnica", no una tecla aceleradora, ¿no? – MarkJ

Respuesta

2

Este es el comportamiento normal de .NET ("por diseño", dicen).

Aquí es un artículo que debe ayudar con su problema - no es simple o bastante para comenzar con, pero una vez que se hace, cualquier combinación de teclas configuradas se pueden agregar fácilmente:

Building Keyboard Accelerators into .NET Windows Forms Applications - Code Guru

Básicamente , esta solución implica crear una clase, cargar una tabla hash y anular ProcessCmdKey para configurar su propio controlador de acelerador.

5

Puede modificar este comportamiento por pegar este fragmento en su forma:

protected override bool ProcessDialogChar(char charCode) { 
     if ((Control.ModifierKeys & Keys.Alt) == Keys.None) return false; 
     return base.ProcessDialogChar(charCode); 
    } 

No es 100% seguro de que esto no va a tener otros efectos secundarios, la manipulación en Winforms teclado está contorneado por decirlo suavemente.

+3

Gracias, hice lo mismo sobre ProcessMnemonicChar en los controles que reciben los aceleratos. –

Cuestiones relacionadas