Pregunta

Tengo una forma, dibujo personalizado, no hay controles.

Cuando necesito para obtener la entrada del usuario que vaya a eventos OnKeyDown y asigne KeyData del evento para una cadena ** - para que pueda reconocer que el usuario ha pulsado "X ctrl", etc, así que todo está casi bien ... el problema es con diferentes configuraciones de teclado y las letras de idiomas específicos - por lo que hoy mis usuarios obtener

a -> a

O -> o

Así que necesito el evento KeyPress derecho? Pero, ¿cómo sé que el usuario escribió en, por ejemplo, 'L' y no alt + L? No puedo sacarlo de mi cabeza que desde hace un tiempo ...

** - Tengo que hacerlo así desde que permiten a los usuarios a configurar y utilizar atajos .ToString () produce no tan fácil de usar como texto "OemPeriod, Control" o aún mejor: "tecla de control, control"

¿Fue útil?

Solución

Sí, tendrá el evento KeyPress. O mejor dicho, anular OnKeyPress. Mapeo de los códigos de teclas virtuales en el evento KeyDown de pulsaciones de teclas es bastante difícil, que tendría que estar al tanto de la disposición del teclado actual. Echar un vistazo a la documentación de MSDN para ToUnicodeEx () para ver lo que está en contra.

Usted no tiene que preocuparse de combinaciones de teclas como Alt + L. No generan un evento de pulsación de tecla.

Este es un ejemplo. Iniciar un nuevo Windows Forms proyectan y hacen que la mirada código como el siguiente:

using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }
    StringBuilder mText = new StringBuilder();

    protected override void OnKeyPress(KeyPressEventArgs e) {
      if (e.KeyChar == '\b') {
        if (mText.Length > 0) mText.Remove(mText.Length - 1, 1);
      }
      else mText.Append(e.KeyChar);
      Invalidate();
    }

    protected override void OnPaint(PaintEventArgs e) {
      TextFormatFlags fmt = TextFormatFlags.Left;
      TextRenderer.DrawText(e.Graphics, mText.ToString(), this.Font, this.ClientRectangle, Color.Black, fmt);
    }
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top