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(1010);
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

user profile iconNemag hat folgendes geschrieben Zum zitierten Posting springen:
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.