Laden...

KeyPress-Event: e.Handled zeigt keine Wirkung

Erstellt von GIGGS vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.790 Views
G
GIGGS Themenstarter:in
67 Beiträge seit 2009
vor 15 Jahren
KeyPress-Event: e.Handled zeigt keine Wirkung

Hallo liebe C#-Entwickler,

ich habe folgende Funktion geschrieben, mit der ich überprüfen möchte, ob ein Zeichen einer Taste nun gezeichnet werden soll oder nicht.
Wenn nach Name gesucht wird, sollen alle Buchstaben + Backspace erlaubt sein; im anderen Falle wir über ein Nummer gesucht und nun sollten alle zahlen + Backspace erlaubt sein. Fals andere Tasten gedrückt werden, soll nichts passieren.


private void textBoxFind_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        GetInfo();
        return;
     }
            
      if (findBy == FindBy.Name)
         e.Handled = !(IsKeyAlphbeticCharacter(e.KeyCode) || IsKeyBackKey(e.KeyCode) || IsModifierKeyShift(e.Modifiers));
      else
         e.Handled = !(IsKeyNumericCharacter(e.KeyCode) || IsKeyBackKey(e.KeyCode) || IsModifierKeyShift(e.Modifiers));
}



private bool IsKeyNumericCharacter(Keys key)
{
     return ((key >= Keys.D0 && key <= Keys.D9) ||
                 (key >= Keys.NumPad0 && key <= Keys.NumPad9)); 
}

private bool IsKeyAlphbeticCharacter(Keys key)
{
     return ((key >= Keys.A && key <= Keys.Z));
}

private bool IsKeyBackKey(Keys key)
{
      return (key == Keys.Back);
}

private bool IsModifierKeyShift(Keys key)
{
       return (key == Keys.Shift);
}

Es wird jedoch immer ein Zeichen in die Textbox geschrieben, ob nun handeled = true oder = false ist!
ich habe es so verstanden, dass bei true nichts passiert und bei false der Charakter gezeichnet wird.

Habe ich etwas falsch verstanden? Könntet ihr mich berichtigen?

vielen Dankim Voraus,
mit freundlichen Grüßen

GIGGS

J
3.331 Beiträge seit 2006
vor 15 Jahren

Hallo,

warum schreibst Du im Titel "KeyPress" und benutzt selbst "KeyDown"? 🙄 Bitte die Überschrift ändern!

Kontrolliere Dein Vorgehen erst einmal selbst mit [FAQ] In einer TextBox nur bestimmte Zeichen/Eingaben zulassen.

Gruß Jürgen

82 Beiträge seit 2009
vor 15 Jahren

Also ich mach das immer im Leave-Event der Textbox und überprüf dann per RegEx die Einträge, also in etwa so:


private void textBox1_Leave(object sender, EventArgs e)
        {
            Regex reg = new Regex(@"pattern hier einfügen");
            if (!reg.IsMatch(textBox1.Text))
            {
                textBox1.BackColor = Color.Tomato;
                MessageBox.Show("Der eigegebene Text ist ungültig (hier Begründung einfügen)", "Ungültiger Text", MessageBoxButtons.OK, MessageBoxIcon.Information);
                textBox1.Focus();
            }
            else
                textBox1.BackColor = Color.White;
        }

Damit sieht der Benutzer sofort, dass seine Eingabe nicht in Ordnung war, und du kannst ihn auch informieren (ob jetzt per MessageBox oder wie auch immer), warum er ne falsche Eingabe gemacht hat. Außerdem kommt er solange aus dem Textfeld net raus, wie die Eingabe net korrigiert wurde. Das mit den Farben ist nochmal n kleiner optischer Hinweis.

(wäre vielleicht ne Idee, die Möglichkeit mit RegEx zu prüfen, ebenfalls in die FAQ aufzunehmen)

Diskordianer schwimmen nicht gegen den Strom - sie klettern aus dem Fluss! Ein Mathematiker ist ein Mensch, der einen ihm vorgetragenen Gedanken nicht nur sofort versteht, sondern auch weiß auf welchem Denkfehler er beruht
1.665 Beiträge seit 2006
vor 15 Jahren

PS:

IsKeyAlphbeticCharacter(e.KeyCode)

dafür gibt es char.IsLetter(); Die Überprüfung auf zulässige Zeichen solltest du besser mit :::