Entwickler-Ecke

WPF / Silverlight - KeyEventArgs bei Space-Taste


Oppi35 - Sa 30.10.10 10:24
Titel: KeyEventArgs bei Space-Taste
Ich möchte in einer Textbox nur Zahlen zulassen. Funktioniert mit dem Keydown-Event auch ganz einfach. Die Eingabe der Space-Taste kann ich leider nicht verhindern.

Wenn ich in einer Test-Messagebox das eingegebene Zeichen abfrage mit

Messagebox.show(e.Key.tostring());

dann wird das jeweilige Zeichen ausgegeben. Nur bei Space kommt scheinbar auch nichts an im KeyDownEvent. Warum nicht?

Wie kann ich das Drücken der Space-Taste entsprechend abfangen. Gibt es weitere Tasten, die nicht im KeyDownEvent behandelt werden?

Vielen Dank für Eure Hilfe.


Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Sa 30.10.2010 um 11:43
Moderiert von user profile iconChristian S.: Topic aus WinForms verschoben am Sa 30.10.2010 um 13:41


Th69 - Sa 30.10.10 10:54

Zeig mal etwas mehr Code.
Und das KeyPress-Ereignis wäre m.E. hierfür besser geeignet.

Evtl. hilft dir aber auch meine numerische TextBox: NumericTextBox (basierend auf dem Windows-Standard-Control) [http://www.mycsharp.de/wbb2/thread.php?threadid=80261] (sofern es dir nur um ganze Zahlen geht)


Oppi35 - Sa 30.10.10 12:11

Ein KeyPress Ereignis gibt es in der Text-Box (WPF) nicht. Habe ich auch schon gesucht. Eine numeric-Box ist ne feine Sache, aber mit dem unten gezeichten Code wäre mein Problem ja behoben, wenn eben die Space Taste auch gesendet werden würde:)

Warum löst die Space-Taste kein KeyDownEvent aus?

Hier mein Code:



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
private void tb_PLZ_Eingabe_KeyDownEvent(object sender, KeyEventArgs e)
        {
            ObservableCollection<Key> allowedkeys = new ObservableCollection<Key>();
            allowedkeys.Add(Key.D0);
            allowedkeys.Add(Key.D1);
            allowedkeys.Add(Key.D2);
            allowedkeys.Add(Key.D3);
            allowedkeys.Add(Key.D4);
            allowedkeys.Add(Key.D5);
            allowedkeys.Add(Key.D6);
            allowedkeys.Add(Key.D7);
            allowedkeys.Add(Key.D8);
            allowedkeys.Add(Key.D9);
            allowedkeys.Add(Key.Delete);
            allowedkeys.Add(Key.Back);
            allowedkeys.Add(Key.NumPad0);
            allowedkeys.Add(Key.NumPad1);
            allowedkeys.Add(Key.NumPad2);
            allowedkeys.Add(Key.NumPad3);
            allowedkeys.Add(Key.NumPad4);
            allowedkeys.Add(Key.NumPad5);
            allowedkeys.Add(Key.NumPad6);
            allowedkeys.Add(Key.NumPad7);
            allowedkeys.Add(Key.NumPad8);
            allowedkeys.Add(Key.NumPad9);

            e.Handled = true;
            foreach (Key key in allowedkeys)
            {
                if (e.Key == key)
                {
                    e.Handled = false;
                }
                
            }
        }


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Trashkid2000 - Sa 30.10.10 12:58

Hi,

probier mal das PreviewKeyDown-Event! Dort wird die Space-Taste erkannt.
Ansonsten bleibt der Code der gleiche.

LG, Marko

//edit
ich würde die Collection der allowedKeys nicht bei jeder Eingabe eines Buchstabens neu erzeugen


Th69 - Sa 30.10.10 13:30

Hallo Oppi35,

dann hättest du auch besser gleich im WPF-Forum gepostet -)

Und deinen Code hier beim Posten solltest du besser in Code-Tags [ cs ] [ /cs ] (ohne die Leerzeichen) packen...


Oppi35 - Sa 30.10.10 13:50

Vielen Dank Marko, passt jetzt.

Mit der Neuerstellung der Collection ist mir klar. Habe den Code nur direkt aus dem Erstellungsprozess geposted:)

Jetzt werde ich interessehalber[quote] nochmal unter Bubbeling/Tunneling nachlesen, warum die Space Taste anders als die anderen Tasten behandelt wird. Aber wichtig ist erstmal, dass der Code funktioniert.

Also nochmal Vielen Dank.

Gruß
Frank