Entwickler-Ecke
WinForms - Textbox in "Echtzeit" prüfen?
sharpx - Mi 07.01.09 12:15
Titel: Textbox in "Echtzeit" prüfen?
Hallo,
Angenommen ich habe eine Textbox welche ich durch tbx ansprechen kann.
Ist es nun möglich zu prüfen, ob ein User "ENTER" drückt und dies zu unterbinden?
Das Ganze sollte aber sofort ablaufen, also sprich der Benutzer tippt in die Textbox, sobald er auf ENTER drückt, kommt ein kleiner Fehler: "Diese Taste ist nicht erlaubt" und ENTER wird auch nicht in der Textbox dargestellt.
Danke für Eure Hilfen
Moderiert von
Christian S.: Topic aus C# - Die Sprache verschoben am Mi 07.01.2009 um 11:46
JüTho - Mi 07.01.09 12:22
Schon einmal etwas davon gehört, dass NET mit Ereignissen arbeitet? Schon einmal in der SDK-Doku/MSDN geblättert, welche Ereignisse eine TextBox kennt? Schon einmal die dazugehörigen Beschreibungen gelesen? Und weißt Du, dass "Taste" auf englisch "Key" heißt?
Etwas mehr Eigeninitiative bitte! Jürgen
PS. Ich kann verstehen, wenn Du die konkrete Frage "Enter im Ereignis xxx unterdrücken" nicht beantworten kannst. Aber bis dorthin musst Du selbst kommen.
sharpx - Mi 07.01.09 12:32
Okay habe mich ejtzt soweit vorgearbeitet:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| private void kp(object sender, System.Windows.Forms.KeyPressEventArgs e) { if (e.KeyChar == (char)13) { } }
void RtTextChanged(object sender, EventArgs e) { this.rt.KeyPress += new KeyPressEventHandler(kp); } |
Kannst du mir einen Tipp geben wie man das ENTER drücken unterbindet?
Sprich dass in der Textbox nichts angezeigt wird?
JüTho - Mi 07.01.09 12:38
Es gibt vielleicht noch das eine oder andere Ereignis, mit dem was zu machen wäre. Was meinst Du wohl, warum ich auf die Übersetzung "Key" hingewiesen habe? :roll: Jürgen
Na, geht doch!
Nun musst Du nur noch die EventHandler (Ereignisbehandlungsmethoden) richtig zuordnen:
Diese Zeile gehört nach
InitializeComponents, am besten in die Designer.cs (ich verstehe sowieso nicht, warum Du das nicht durch den Designer erzeugen lässt, aber das ist unwichtig):
C#-Quelltext
1:
| this.rt.KeyPress += new KeyPressEventHandler(kp); |
Dann sollten rt und kp "vernünftige" Namen bekommen.
Dann fehlt nur noch das, was ich schon als PS genannt hatte. Die Lösung dazu steht in der
SDK-Doku/MSDN im Beispiel zu
KeyPressEventHandler-Delegat.
Tja, es gibt offensichtlich Unterschiede zwischen
WinForms und
WebForms. Wenn Du richtig lesen würdest, hättest Du die Frage im richtigen Forum gestellt (Windows Forms oder ASP.NET), und wir würden keine unpassenden Antworten geben.
Bitte sage genau, wofür Deine Frage gilt! Jürgen
bakachan - Mi 07.01.09 12:39
Es gibt auch noch andere Events außer TextChanged
[Edit]
Da war JüTho schneller
Christian S. - Mi 07.01.09 12:48
Du guckst Dir die Komponente im falschen Namespace an, der richtige wäre System.Windows.Forms
sharpx - Mi 07.01.09 12:49
Was ich mir zusammengereimt habe wäre folgendes:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private void tbx_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { e.SuppressKeyPress = true; } } |
Jedoch funktioniert dies nicht.
Sollte das eigentlich nicht korrekt sein?
jaenicke - Mi 07.01.09 12:51
Naja, fast. Du hast ja jetzt selbst gesucht, deshalb ;-): Wie wäre es mit KeyPress?
C#-Quelltext
1: 2: 3: 4:
| private void tbx_KeyPress(object sender, KeyPressEventArgs e) { e.Handled = Convert.ToInt32(e.KeyChar) == 13; } |
JüTho - Mi 07.01.09 12:53
sharpx hat folgendes geschrieben : |
Jedoch funktioniert dies nicht.
Sollte das eigentlich nicht korrekt sein? |
Bitte lies Dir meine obige (überarbeitete) Antwort nochmal durch, damit wir nicht aneinander vorbeireden. Jürgen
Komisch, oben hatte er schonmal KeyPress verwendet. Dann nimmt er KeyDown, springt zwischen WinForms und WebForms hin und her; vielleicht hat er sogar eine RichTextBox (wegen des Namens rt). Er könnte uns die Hilfe wirklich etwas erleichtern.
sharpx - Mi 07.01.09 12:55
Funktioniert leider nicht...
Wenn ich ENTER drücke wird in der Textbox trotzdem der Umbruch angezeigt.
?
sharpx - Mi 07.01.09 12:56
JüTho hat folgendes geschrieben : |
sharpx hat folgendes geschrieben : | Jedoch funktioniert dies nicht.
Sollte das eigentlich nicht korrekt sein? |
Bitte lies Dir meine obige (überarbeitete) Antwort nochmal durch, damit wir nicht aneinander vorbeireden. Jürgen
Komisch, oben hatte er schonmal KeyPress verwendet. Dann nimmt er KeyDown, springt zwischen WinForms und WebForms hin und her; vielleicht hat er sogar eine RichTextBox (wegen des Namens rt). Er könnte uns die Hilfe wirklich etwas erleichtern. |
Ich dachte KeyDown und Key Press ist im Prinzip das selbe, habe mich da aber nochmals eingelesen, ist es nicht - mein Fehler!
Ich verwende eine RichTextBox, das stimmt.
Und als Referenz habe ich das hie rgenommen:
http://msdn.microsoft.com/de-de/library/system.windows.forms.control.keypress(VS.80).aspx
lg
JüTho - Mi 07.01.09 13:09
Na, dann bist Du fast am Ende!
Benutze Deine if-Abfrage aus Deinem früheren Versuch mit KeyPress und den Lösungshinweis von Sebastian Jaenicke.
Jürgen
PS. Ich hoffe, Du ziehst die Lehre aus diesem Hin und Her und gibst künftig von Anfang an klare und eindeutige Hinweise im richtigen Unterforum.
sharpx - Mi 07.01.09 13:12
JüTho hat folgendes geschrieben : |
Na, dann bist Du fast am Ende!
Benutze Deine if-Abfrage aus Deinem früheren Versuch mit KeyPress und den Lösungshinweis von Sebastian Jaenicke.
Jürgen
PS. Ich hoffe, Du ziehst die Lehre aus diesem Hin und Her und gibst künftig von Anfang an klare und eindeutige Hinweise im richtigen Unterforum. |
Es handelt sich doch um das richtige Forum?
Die Frage bezieht sich ja auf Windows.Forms...
JüTho - Mi 07.01.09 13:14
sharpx hat folgendes geschrieben : |
Es handelt sich doch um das richtige Forum?
Die Frage bezieht sich ja auf Windows.Forms... |
Nachdem Christian es verschoben hat. Du hast die Frage in "C# die Sprache" gestellt und zwischendurch einen Link auf WebForms benutzt. :roll:
Und wo bleibt die Lösung?
Jürgen
sharpx - Mi 07.01.09 13:16
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private void rt_KeyPress(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { e.Handled = true; } } |
Funktioniert jedoch leider nicht.
Christian S. - Mi 07.01.09 13:20
Hast Du den Event-Handler über den Formdesigner automatisch erstellen lassen, oder manuell im Texteditor. Falls letzteres zutrifft, hast Du den Event-Handler auch dem Event zugewiesen?
sharpx - Mi 07.01.09 13:22
Hab mir das jetzt mal über den Designer automatisch erstellen lassen.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| void rt_keypress(object sender, KeyPressEventArgs e) { if (e.KeyCode == Keys.Enter) { MessageBox.Show("d"); e.Handled = true; } } |
Jedoch:
| Zitat: |
System.Windows.Forms.KeyPressEventArgs enthält keine Definition für KeyCode. (CS0117) - C:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\pdfinside\Form3.cs:161,10
|
EDIT:
Mein Fehler wenn ich den KeyDown Event nehme funktionierts:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| void rt_keydown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { MessageBox.Show("d"); e.Handled = true; } } |
Danke für eure Hilfen!
jaenicke - Mi 07.01.09 13:22
sharpx hat folgendes geschrieben : |
| Ich verwende eine RichTextBox, das stimmt. |
:autsch: :autsch: :autsch:
Warum schreibst du das denn nicht gleich? Anders als bei einer normalen TextBox funktioniert das über KeyPress dort nicht...
Das Problem dabei ist, dass das Enter bereits nach KeyDown eingetragen wird, KeyPress und KeyUp folgen danach. bei einer RichTextBox geht es also so:
C#-Quelltext
1: 2: 3: 4:
| private void richTextBoxX_KeyDown(object sender, KeyEventArgs e) { e.Handled = Convert.ToInt32(e.KeyCode) == 13; } |
JüTho - Mi 07.01.09 14:22
... wobei mir sharpx' Vergleich besser gefällt:
C#-Quelltext
1:
| e.Handled = e.KeyCode == Keys.Enter; |
(zumal ich das Convert.ToXxx sowieso vermeide; hier würde auch
(int) genügen).
Jürgen
jaenicke - Mi 07.01.09 14:27
JüTho hat folgendes geschrieben : |
... wobei mir sharpx' Vergleich besser gefällt:
C#-Quelltext 1:
| e.Handled = e.KeyCode == Keys.Enter; |
(zumal ich das Convert.ToXxx sowieso vermeide; hier würde auch (int) genügen). |
Stimmt, ich hab das eben noch von dem KeyPress so gelassen, weil dort der Vergleich ohne Cast ja nicht geht. Da habe ich gar nicht weiter drüber nachgedacht. :oops:
ffprogramming - Do 08.01.09 20:08
Titel: text changed
mittels TextChanged-Ereignis
so glaube ich könnte es funktionieren
C#-Quelltext
1: 2: 3:
| Private Sub TextBox1_TextChanged( ... ) Handles TextBox1.TextChanged ... End Sub |
jaenicke - Do 08.01.09 20:17
Mit TextChanged kann man da eigentlich nichts erreichen dachte ich. Wie willst du damit das Drücken der Entertaste abfangen?
(Mal davon abgesehen, dass das Visual Basic.NET und nicht C# ist. ;-))
Die verbesserte Version von
JüTho in KeyDown, wie ich es ja geschrieben hatte, funktioniert doch auch schon. ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!