Autor Beitrag
JT1971
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40



BeitragVerfasst: Di 25.08.09 06:47 
Hi 8)

Hab eine eigene Textbox zur Laufzeit erzeugt mit

ausblenden 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?

ausblenden 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 2



BeitragVerfasst: Di 25.08.09 08:04 
Servus

ausblenden C#-Quelltext
1:
2:
3:
TextBox tb = new TextBox();  
tb.KeyDown += new KeyEventHandler(tb_KeyDown);
tb. ...


und dann halt

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
tb.KeyDown += tb_KeyDown;					


Jürgen
JT1971 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 2



BeitragVerfasst: 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:

ausblenden 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:
openbook.galileocomp...ng.de/visual_csharp/
JT1971 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40



BeitragVerfasst: Di 25.08.09 10:31 
Ok, danke. Das lese ich noch mal nach.