Entwickler-Ecke
WinForms - Wieso funktioniert folgender csharp code nicht?
pacours - So 20.03.11 20:14
Titel: Wieso funktioniert folgender csharp code nicht?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| private void textBox1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.A); { textBox1.Text = "b"; }
} |
die fehlermeldung ist:
Error 2 'WindowsFormsApplication1.Form1' does not contain a definition for 'textBox1_TextChanged' and no extension method 'textBox1_TextChanged' accepting a first argument of type 'WindowsFormsApplication1.Form1' could be found (are you missing a using directive or an assembly reference?)
ich mach noch nicht lange sachen mit csharp. könnt ihr mir weiterhelfen?
Moderiert von
Kha: C#-Tags hinzugefügt
Trashkid2000 - So 20.03.11 20:48
Hi,
ist Dir schonmal aufgefallen, dass Du ein Semikolon hinter dem if hast?
pacours hat folgendes geschrieben : |
C#-Quelltext 1: 2: 3: 4:
| if (e.KeyCode == Keys.A); { textBox1.Text = "b"; } |
|
Aber Visual Studio gibt dabei auch eine Warnung aus:
Quelltext
1:
| Möglicherweise falsche leere Anweisung. |
Also lerne, Fehlermeldungen bzw. Warnungen richtig zu interpretieren!
Marko
pacours - So 20.03.11 22:02
Ja ich hab das auf English und ich versteh das zwar aber wenn es nur als Warnung angezeiggt wird achte ich da wenig drauf. Aber du hast recht ich sollte selbst auf Warnungen besser achten :)
pacours - So 20.03.11 22:07
helfen tuts trotzdem nicht
jaenicke - So 20.03.11 22:36
Der Code ist so jedenfalls ansonsten korrekt soweit ich das sehe, insofern muss der Fehler woanders stecken, vielleicht steht der an der falschen Stelle oder so.
Oder versuchst du die Funktion irgendwo manuell aufzurufen oder so? Wie sieht denn der restliche Code aus und wo genau kommt die Fehlermeldung?
pacours - So 20.03.11 22:54
Ok den Fehler hab ich wegbekommen. Ich habe vergessen im Designer was zu ändern. Aber jetzt hab ich das nächste problem: wenn ich "a" schreibe um "b" zu erhalten steht da "ab". Wie kann ich machen das da nur "b" steht?
Yogu - Mo 21.03.11 09:35
Soweit ich weiß, musst du nur die Eigenschaft Handled des e-Parameters auf true setzen, um zu signalisieren, dass du den Tastendruck bereits verarbeitet hast und die eigentliche Aktion nicht ausgeführt werden soll.
pacours - Mo 21.03.11 18:36
e.Handled = (true);
hilft dabei garnichts wenn du das meinst
Yogu - Mo 21.03.11 21:52
Ok, du musst das Ereignis KeyPress verwenden. Das macht auch Sinn, denn dann wird "b" auch mehrmals hintereinander eingefügt, wenn du die Taste gedrückt hältst.
pacours - Mo 21.03.11 23:30
was meinst du damit? Entschuldigung meine unwissenheit ich mach das noch nicht lange
jaenicke - Mo 21.03.11 23:57
Naja wie meinst du das? Du nimmst eben statt KeyDown das Ereignis KeyPress. :gruebel:
pacours - Di 22.03.11 14:18
Ja das dachte ich auch aber das hat auch nicht geklappt deswegen hab ich mich gefragt ob du das meintest.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| private void textBox1_KeyPress(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.A) {
textBox1.Text += "o"; } if (e.KeyCode == Keys.B) {
textBox1.Text += "x"; } |
Form Designer
C#-Quelltext
1:
| this.textBox1.KeyDown += this.textBox1_KeyPress; |
hilft dir das vielleicht?
Moderiert von
Christian S.: C#-Tags hinzugefügt
jaenicke - Di 22.03.11 14:41
Und wo setzt du e.Handled?
pacours - Di 22.03.11 15:55
Achso das hab ich da kurz rausgenommen um zu gucken ob das was verändert
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| private void textBox1_KeyPress(object sender, KeyEventArgs e) { e.Handled = (true); if (e.KeyCode == Keys.A) {
textBox1.Text += "o"; } if (e.KeyCode == Keys.B) {
textBox1.Text += "x"; } } |
Moderiert von
Christian S.: C#-Tags hinzugefügt
jaenicke - Di 22.03.11 16:05
Der Code kann doch so gar nicht kompilierbar sein, da es KeyCode nur bei KeyDown und KeyUp gibt... :roll:
Bei KeyPress heißt es KeyChar, und damit geht es auch.
bakachan - Di 22.03.11 16:12
pacours hat folgendes geschrieben : |
Form Designer
C#-Quelltext 1:
| this.textBox1.KeyDown += this.textBox1_KeyPress; |
|
Du musst natürlich auch das KeyPress-Event verwenden und nicht einfach deine Funktion umbenennen.
pacours - Di 22.03.11 17:29
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| private void textBox1_KeyPress(object sender, KeyEventArgs e) {
e.Handled = (true); if (e.KeyChar == Keys.A) {
textBox1.Text += "o"; } if (e.KeyChar == Keys.B) {
textBox1.Text += "x"; } |
klappt immernoch nicht
C#-Quelltext
1:
| this.textBox1.KeyDown += this.textBox1_KeyPress; |
Moderiert von
Christian S.: C#-Tags hinzugefügt
jaenicke - Di 22.03.11 18:49
pacours hat folgendes geschrieben : |
klappt immernoch nicht
C#-Quelltext 1:
| this.textBox1.KeyDown += this.textBox1_KeyPress; | |
Wie jetzt?
bakachan hat doch gerade geschrieben, dass du auch das KeyPress Event benutzen musst. Und dann postest du den Code aus dem Designer, in dem du weiter KeyDown verwendest und wunderst dich, dass es nicht geht? :nut:
pacours - Di 22.03.11 19:24
ja wenn ich aber
this.textBox1.KeyPress += this.textBox1_KeyPress;
schreibe kommen noch mehr errors
Christian S. - Di 22.03.11 19:57
pacours hat folgendes geschrieben : |
schreibe kommen noch mehr errors |
Und die sind geheim? Oder zu viel Arbeit, diese zu posten? :roll:
jaenicke - Di 22.03.11 19:58
Du sollst ja auch gar nicht in dem Designercode herumpfuschen...:roll:
Du musst einfach nur im Designer das andere Event doppelklicken und den Quelltext hineinpacken. Und dass da die Typen und Parameter nicht mehr stimmen, hatte ich ja geschrieben. Das musst du eben anpassen.
pacours - Di 22.03.11 20:15
this.textBox1.KeyPress += this.textBox1_KeyPress;
Moderiert von
Christian S.: Beiträge zusammengefasst
Error 1 No overload for 'textBox1_KeyPress' matches delegate 'System.Windows.Forms.KeyPressEventHandler'
Yogu - Di 22.03.11 21:00
jaenicke hat folgendes geschrieben : |
Du sollst ja auch gar nicht in dem Designercode herumpfuschen...:roll:
Du musst einfach nur im Designer das andere Event doppelklicken und den Quelltext hineinpacken. Und dass da die Typen und Parameter nicht mehr stimmen, hatte ich ja geschrieben. Das musst du eben anpassen. |
Hast du dazu Fragen?
pacours - Di 22.03.11 22:26
Error 1 No overload for 'textBox1_KeyPress' matches delegate 'System.Windows.Forms.KeyPressEventHandler'
jaenicke - Di 22.03.11 22:49
Lösche die Zuordnung des Events und lösche den entsprechenden Quelltext (also textBox1_KeyPress). Dann lege das KeyPress Event wieder durch einen Doppelklick neu an.
Der Grund ist ganz einfach, dass das KeyDown-Event logischerweise anders aussieht als das KeyPress-Event. Dadurch, dass du am Designerquelltext herumgefummelt hast, hast du die durcheinandergebracht. Ich weiß ja nicht wie du auf diese dämliche Idee gekommen bist... :roll: :autsch:
Wahrscheinlich, weil es ja dabei steht, dass man das machen soll:
Zitat: |
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary> |
:autsch:
Christian S. - Di 22.03.11 23:55
Also, pacours, wenn Du Dir noch nicht einmal mehr die Mühe machst, auf Fragen zu antworten (siehe Yogus Frage und Deine Nicht-Antwort), dann bin ich geneigt, hier mal dicht zu machen, damit Du selber ein bisschen an Deinem Problem arbeiten kannst.
Alternativ kannst Du durch eigene Versuche der Problemlösung glänzen, dann bleibt der Thread offen. :nixweiss: Wenn Du ein Problem gelöst haben willst, musst Du da schon selber mal ein bisschen Mühe und Hirnschmalz reinstecken. Das kann und will Dir niemand abnehmen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!