Frage

Ich habe ein Formular, benutzerdefinierte Zeichnen bekommt, keine Kontrollen.

Wenn ich brauche die Eingabe vom Benutzer erreiche ich Ereignis OnKeyDown gehen und dann Veranstaltung KeyData in einem String Karte ** - so, dass ich diesen Benutzer erkennen kann, hat „ctrl X“ gedrückt wird, usw., also fast alles in Ordnung ist ... das Problem ist mit verschiedenen Tastatureinstellungen und sprachspezifische Buchstaben - so für heute meine Nutzer bekommen

-> a

ó -> o

Also habe ich das KeyPress-Ereignis richtig brauchen? Aber wie kann ich wissen, dass Benutzer eingegeben zum Beispiel ‚l‘ und nicht alt + L? Ich kann meinen Kopf nicht für ein um das bekommen, während jetzt ...

** - Ich brauche es, so zu tun, da ich damit Benutzer zu konfigurieren Verknüpfungen und mit .ToString () erzeugt nicht so benutzerfreundlich Text wie „OemPeriod, Control“ oder noch besser: „controlKey, Control“

War es hilfreich?

Lösung

Ja, werden Sie das KeyPress-Ereignis benötigen. Oder besser gesagt, außer Kraft setzen OnKeyPress. virtuellen Schlüssel-Mapping-Codes in dem Ereignis KeyDown auf Tastenanschläge ist ziemlich schwierig, würden Sie kennen die aktuelle Tastaturlayout sein. Werfen Sie einen Blick auf die MSDN-Dokumentation für ToUnicodeEx () um zu sehen, was Sie sind gegen.

Sie müssen sich keine Sorgen machen über Tastenkombinationen wie Alt + L. Sie erzeugen keine ein KeyPress-Ereignis.

Hier ist ein Beispiel. Starten Sie eine neue Windows Forms-Projekt und stellen Sie den Code wie folgt aussehen:

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);
    }
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top