Entwickler-Ecke

WinForms - Touchscreentastatur


Fabiii321 - Sa 01.09.12 22:18
Titel: Touchscreentastatur
Hallo,
ich habe eine kurze Frage:

Ich habe eine kleine Art Tastatur erstellt mit mehreren Buttons.
Es gibt diese Buttons:
1
2
3
4
5
6
7
8
9
E

Diese Buttons sind dazu da mehrere Zahlen in ein Textfeld zu schreiben.
Ich habe auch hier ein Code den jeder Button zugewiesen bekommt:

C#-Quelltext
1:
TextBox1.Text = "1";                    

jetzt will ich aber das diese Zahlen aneinander gefügt werden.
Also nicht dass wenn ich auf 1 klick und danach auf "2" klick dass dan nur noch "2" im Textfeld steht sondern "12".
Dass sich praktisch die Zahlen hintereinander schreiben.
SO wie bei einer Tastatureingabe halt.
Erst wenn ich auf den Button "E" drücke soll dann was abgeschickt werden.

Vielen Dank für eure Bemühungen
Gruß
Fabi

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Christian S. - Sa 01.09.12 22:35

Hallo!

Du musst einfach nur zwei Strings aneinander hängen, also einfach (als Beispiel) string s = "a" + "b", was dann "ab" ergibt.

Viele Grüße,
Christian


Palladin007 - So 02.09.12 01:15

Eine so einfache Aufgabe würde ich persönlich in nur einem Event erledigen.
Für eine Forms-Oberfläche würde das dann so aussehen:


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:
private void KeyBoardNumberButtons_Click(object sender, EventArgs e)
{
    var BtnText = ((Button)sender).Text;
    if (BtnText.Length == 1)
    {
        if (Convert.ToChar(BtnText) >= '0' && Convert.ToChar(BtnText) <= '9')
        {
            TextBox1.Text += BtnText;
        }
    }
}

private void KeyBoardSendButton_Click(object sender, EventArgs e)
{
    if (((Button)sender).Text == "E")
    {
        SendText(TextBox1.Text);
    }
}

private void SendText(string txt)
{
    // Sende den eingegebenen Text
}


Ich weiß, danach hast du nicht gefragt, aber vielleicht hilft es ja trotzdem ^^

Hab das nur nebenbei geschrieben, kann also sein, dass sich mir der eine oder andere Fehler eingeschlichen hat.
Um das zu nutzen, kannst du allerdings nicht einfach im Forms-Editor auf einen Button doppelklicken. Du musst dazu in den Events das Click-Event raus suchen und dort dann diese Methode angeben. Die sollte eigentlich gleich als passende Methode erkannt werden.
Dann wird bei jedem der Buttons von 1 bis 9 und E diese Methode aufgerufen. Wenn es als Text 1 bis 9 enthält (49 bis 57 sind die Dezimal-Zahlen, in die ein Zeichen nach der ASCII-Tabelle explizit konvertiert werden kann. Daher wird der Text erst in char und dann in int umgewandelt), dann wird dieser Text in die TextBox angehängt. Wenn es ein großes "E" ist, wird der Text gesendet, oder etwas anderes passiert.

Das, wonach du eigentlich gefragt hattest, ist folgendes:

C#-Quelltext
1:
TextBox1.Text += BtnText;                    


Da du ja eigentlich nur einen Buchstaben anfügen willst, bietet sich die Kurzschreibweise hier += besser an.
Das funktioniert mit jedem Text.


Ralf Jansen - So 02.09.12 13:12

Zitat:

C#-Quelltext
1:
if ((int)Convert.ToChar(BtnText) < 58 | (int)Convert.ToChar(BtnText) > 48)                    

Oder? Sollte wohl eher & sein.

Besser gleich char.IsDigit verwenden. Das Fabiii321 keine 0 will ist wohl eher nicht Absicht.

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Fabiii321 - Mo 03.09.12 08:36

Hallo,
vielen vielen Dank !
funktioniert !

Sorry sdass ich euch für so eine einfache Frage fragen musste.

Gruß
Fabi


Palladin007 - Mo 03.09.12 17:54

Danke an Th69, dass sie mich auf ein paar kleine DInge in meinem Beispiel-Code hin gewiesen hat.

Hab es korrigiert und auch kleine Verbesserungs-Vorschläge umgesetzt (siehe neues Event und der if-Block mit den Zahlen).