Pregunta

Me he dado cuenta de que el teclado-accesos directos asignados a etiquetaEnlace controles de Windows Forms .NET estándar formas no están funcionando.

He creado una instancia de control LinkLabel y se asigna la propiedad de texto a ser "Seleccionar & todo". Para la mayoría de los controles (etiqueta, botón, botón de radio, etc) esto causaría Alt + A para convertirse en el acceso directo del teclado designado para desencadenar el evento predeterminado (Clicked). Esto no está sucediendo para el LinkLabel (aunque se está trabajando bien para otros controles)

  • He comprobado que la combinación de teclas no es un duplicado.
  • He comprobado para ver si el acceso directo está poniendo el foco en lugar de activación se hace clic. El foco se mantiene sin cambios.
  • He comprobado que la propiedad UseMnemonic se establece en true.

¿Alguna idea?


Solución

Gracias a Charlie por la respuesta correcta. Exactamente lo que necesitaba. Hice una ligera modificación ya que este fragmento de código no se compila como está. LinkLabelLinkClickedEventArgs requiere un LinkLabel.Link como un parámetro de construcción más bien gracias a LinkLabel.

class LinkLabelEx : LinkLabel
{
    protected override bool ProcessMnemonic(char charCode)
    {
        if (base.ProcessMnemonic(charCode))
        {
            if (this.Links.Count == 0)
                return false;
            OnLinkClicked(new LinkLabelLinkClickedEventArgs(this.Links[0]));
            return true;
        }
        return false;
    }
}
¿Fue útil?

Solución

Creo que esto es sólo un defecto de LinkLabel; que no genera un evento de clic cuando se utiliza la tecla de acceso. Sin embargo, he utilizado el siguiente código como una solución alternativa con buenos resultados:

class BetterLinkLabel : LinkLabel
{
  protected override bool ProcessMnemonic( char charCode )
  {
    if( base.ProcessMnemonic( charCode ) )
    {
      // TODO: pass a valid LinkLabel.Link to the event arg ctor
      OnLinkClicked( new LinkLabelLinkClickedEventArgs( null ) );
      return true;
    }
    return false;
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top