Entwickler-Ecke

WinForms - Textbox mit KeyDown Event befüllen


edvazubi - Do 21.03.19 15:55
Titel: Textbox mit KeyDown Event befüllen
Hey, ich habe ein Problem. Ich möchte per KeyDown Event ein Panel aufrufen in dem sich eine TextBox befindet. Diese soll bereits während des Aufrufens mit der ersten gedrückten Taste befüllt werden. Aktuell schaffe ich es, das Panel aufzurufen und gleichzeitig die gewünschte Zahl einzutragen, danach kann ich aber nicht weiter tippen, da die erste Zahl dann immer ersetzt wird. Der Code dazu sieht in etwa so aus:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
private void Form1_KeyDown_1(object sender, KeyEventArgs e)
        {

            if (e.KeyCode == Keys.E)
            {
                Application.Exit();
            }
            if (e.KeyCode == Keys.D1 || e.KeyCode == Keys.NumPad1)
            {
                ShowSuche();
                textBox1.Text = "1";
            }
            else if (e.KeyCode == Keys.D2 || e.KeyCode == Keys.NumPad2)
            {
                ShowSuche();
                textBox1.Text = "2";
            }
            else if (e.KeyCode == Keys.D3 || e.KeyCode == Keys.NumPad3)
            {
                ShowSuche();
                textBox1.Text = "3";
            }
           
            
            else
            {
                HideSuche();
            }
            textBox1.SelectionStart = textBox1.Text.Length;
        }


 public void ShowSuche()
        {
            panel1.Show();
            textBox1.Focus();
        }


Ich habe das ganze einmal stark abgekürzt. Ich hoffe jemand versteht mein Problem und kennt eine Lösung.


Moderiert von user profile iconChristian S.: Topic aus C# & .NET Tutorials verschoben am Do 21.03.2019 um 15:24


Th69 - Do 21.03.19 18:36

Wird denn die TextBox markiert angezeigt?
Evtl. setze noch mal explizit

C#-Quelltext
1:
textBox1.SelectionLength = 0;                    

Was mir noch einfällt: Hast du KeyPreview für die Form auf true gesetzt? Dann wird jedesmal zuerst das KeyDown-Ereignis ausgeführt, d.h. z.B. bei einer weiteren Eingabe von "1" nochmal der Text neu gesetzt!

PS: Ich würde das Setzen des Textes und die Markierung auch in ShowSuche vornehmen, à la

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
public void ShowSuche(string text)
{
    panel1.Show();

    textBox1.Text = text;
    textBox1.SelectionStart = textBox1.Text.Length;
    textBox1.SelectionLength = 0;
    textBox1.Focus();
}

(und bessere Namen für die Steuerelemente vergeben ;- )


edvazubi - Fr 22.03.19 13:37

Hat funktioniert, schönen Dank.