Entwickler-Ecke
WinForms - Komponente zur Laufzeit /Keydown
JT1971 - Di 25.08.09 06:47
Titel: Komponente zur Laufzeit /Keydown
Hi 8)
Hab eine eigene Textbox zur Laufzeit erzeugt mit
C#-Quelltext
1: 2: 3:
| TextBox TB = new TextBox(); TB.Location = new Point(10, 10); this.Controls.Add(TB); |
Eigenschaften einstellen ist ja kein Problem, aber
wie komme ich jetzt an eine Methode KeyDown ran?
Einfach den Code einer anderen KeyDown-Methode
kopieren und den Namen ändern? Also so?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private void TB_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { MessageBox.Show("YES"); } } |
Außerdem kommt bei der Zeile
C#-Quelltext
1:
| if (e.KeyCode == Keys.Enter) |
ein dumper Piepton wenn ich auf Enter drücke
als wenn ein Fehler auftritt bzw. die MessageBox erscheint gar nicht.
Hilfe wäre super
Nemag - Di 25.08.09 08:04
Servus
C#-Quelltext
1: 2: 3:
| TextBox tb = new TextBox(); tb.KeyDown += new KeyEventHandler(tb_KeyDown); tb. ... |
und dann halt
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private void tb_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { MessageBox.Show("YES"); } } |
Denke du musst noch KeyPreview oder PreviewKey in der Form setzen wo das Steuerelement drin ist. (da bin ich mir aber gerade nicht sicher)
JüTho - Di 25.08.09 08:56
Nemag hat folgendes geschrieben : |
| Denke du musst noch KeyPreview oder PreviewKey in der Form setzen wo das Steuerelement drin ist. (da bin ich mir aber gerade nicht sicher) |
Nein, das ist nicht nötig. Wenn das Formular die Tasten aller Controls prüfen soll, dann muss KeyPreview = true gesetzt werden. Wenn (wie hier) der EventHandler nicht an das Formular, sondern an die TextBox selbst gehängt wird, kann darauf verzichtet werden.
Seit NET 2.0 gibt es übrigens die Kurzschreibweise:
C#-Quelltext
1:
| tb.KeyDown += tb_KeyDown; |
Jürgen
JT1971 - Di 25.08.09 09:22
Danke an Nemag und JüTho :zustimm:. Es hat geklappt.
:? Wenn ich noch eine kleine Frage nachschieben darf?
Möchte nun innerhalb (zum Schluß) von tb_keydown
die Textbox auf visible = false setzen (also Enter - Daten übernehmen - und weg)
TB.Visible = false klappt aber nicht (TB ist im aktuellen Kontext nicht vorhanden)
Visible = false löscht mir gleich das ganze Dialogfeld
mit this geht es auch nicht
Woran liegt das?
Nemag - Di 25.08.09 09:48
Naja wie soll denn innerhalb der Funktion die Instanz des Steuerelement bekannt sein, wenn du es zur Laufzeit irgendwo anders erzeugt hast?
Aber über das object sender bekommst du eine Instanz der Textbox die das KeyDownEvent ausgelöst hat.
Also dann quasi:
C#-Quelltext
1: 2: 3:
| TextBox tb = sender as TextBox; if(sender!= null) tb.Visible = false; |
Am besten schaust du dir ein paar grundlegende Bücher an:
http://openbook.galileocomputing.de/visual_csharp/
JT1971 - Di 25.08.09 10:31
Ok, danke. Das lese ich noch mal nach.
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!