Methoden am Beispiel einer TextBox

Veröffentlicht: Dezember 2009
Von Richard Kaiser und Alexander Kaiser

Im Folgenden wird gezeigt, wie man mit einer TextBox Daten ein- und ausgeben kann. Dazu werden einige Methoden der Klassen TextBox, Convert, String und int vorgestellt. Am Beispiel dieser Methoden wird auch gezeigt, wie statische und nicht statische Methoden aufgerufen werden.

Dieser Artikel ist ein kurzer Auszug aus dem Buch „C++ mit Microsoft Visual C++ 2008“ (ISBN 978-3540238690), das C++ mitsamt den Visual C++-Erweiterungen (C++/CLI) umfassend darstellt. Der Verfasser dieses Buches ist ein erfahrener C++- und C#-Trainer, der auch für Firmenschulungen zur Verfügung steht.

Eine TextBox (Toolbox|AllgemeineSteuerelemente) kann wie ein Label einen Text des Datentyps String anzeigen. Der angezeigte Text ist der Wert der Eigenschaft Text, der wie bei einem Label im Eigenschaftenfenster oder im Programm gesetzt werden kann:

textBox1->Text = "Hallo";

Im Unterschied zu einem Label kann ein Anwender in eine TextBox auch während der Laufzeit des Programms Text eingeben. Die Eigenschaft Text enthält immer den aktuell angezeigten Text und ändert sich mit jeder Eingabe des Anwenders.

Beispiel: Die Funktion

private:System::Void button1_Click(System::Object^ sender, System::EventArgs^  e) 

{

label1->Text = textBox1->Text;

}

zeigt den aktuellen Text der TextBox textBox1 auf dem Label label1 an.

Eine einzeilige TextBox wird oft zur Eingabe und eine mehrzeilige TextBox zur Anzeige von Daten verwendet. TextBoxen übernehmen in einem Windows-Programm oft Aufgaben, die in einem C++-Konsolen­programm von cin>> ... und cout<< ... und in einem C-Programm von printf und scanf übernommen werden.

Statische Methoden der Klasse Convert

Eine TextBox liefert eine Eingabe immer als String. Da man oft auch Werte eines anderen Datentyps (z.B. Zahlen) einlesen oder ausgeben will, werden jetzt einige der zahlreichen Konvertierungsfunktionen vorgestellt, mit denen man einen String in einen anderen Datentyp umwandeln kann und umgekehrt. In diesem Zusammenhang werden dann auch einige Unterschiede zwischen statischen und nicht statischen Mehoden gezeigt.

Für die Umwandlung von int-Werten stehen unter anderem die statischen Methoden Convert::ToInt32 und Convert::ToString aus der Klasse Convert zur Verfügung, die in der Online-Hilfe etwa folgendermaßen beschrieben werden:

static int ToInt32(String^ value);

Wenn der als Argument übergebenen String eine Zahl darstellt, ist der Rückgabewert diese Zahl als 32-bit int-Wert. Stellt der String keine Zahl dar, erfolgt eine Fehlermeldung.

static String^ ToString(int value);

Der Rückgabewert ist ein String, der die als Argument übergebene Zahl dar­stellt.

Mit weiteren Methoden des Namens ToString kann man praktisch alle elementa­ren Datentypen in einen String umwandeln. Weitere Methoden der Klasse Convert (wie z.B. ToBoolean oder ToDouble) wandeln Strings in nahezu alle ele­mentaren Daten­typen um.

Wenn die Beschrei­bung einer Methode das Schlüsselwort static enthält, bezeichnet man sie als statische Methode und andern­falls einfach nur als Methode. Beim Aufruf einer statischen Methode muss man vor dem Namen der Methode den Namen der Klasse und den Bereichsoperator :: angeben, während man beim Aufruf einer gewöhnlichen Methode vor dem Namen der Methode ein Objekt der Klasse und meist den Operator -> angeben muss.

Deshalb kann man die statischen Methode ToInt32 und ToString folgendermaßen aufrufen: Nach dem Namen der Klasse Convert, dem Operator :: und dem Namen der Funktion ToInt32 wird in Klammern der umzu­wandelnde String angegeben. Dieser Ausdruck hat den Daten­typ int. Entsprechend wird nach Convert::ToString in Klammern ein int-Aus­druck angegeben, der in einen String umgewandelt werden soll. Dieser Ausdruck hat den Datentyp String^.

Beispiel: In einem Formular mit zwei TextBoxen haben die beiden Ausdrücke

Convert::ToInt32(textBox1->Text) und

Convert::ToInt32(textBox2->Text)

den Datentyp int. Mit ihnen kann man im Unterschied zu den Strings textBox1->Text und textBox2->Text auch rechnen:

Convert::ToInt32(textBox1->Text) + Convert::ToInt32(textBox2->Text)

ist die Summe der Zahlen in den beiden TextBoxen. Diese Summe kann man nun in einer weiteren TextBox textBox3 ausgeben, wenn man sie in einen String umwandelt. Da man Methodenaufrufe beliebig verschach­teln kann, hat man mit

textBox3->Text=Convert::ToString(Convert::ToInt32(textBox1->Text)+

                                 Convert::ToInt32(textBox2->Text));

bereits ein einfaches Programm zur Addition von Zahlen geschrieben, wenn man diese Anweisung beim Anklicken eines Buttons ausführt:

private: System::Void button1_Click_1(

 System::Object^  sender, System::EventArgs^  e) 

{

   textBox3->Text=Convert::ToString(Convert::ToInt32(textBox1->Text)+

                                    Convert::ToInt32(textBox2->Text));

}

Wenn man mehrere Werte zusammen mit einem Text ausgeben will, ist die stati­sche Methode Format der Klasse String oft einfacher als die Methoden der Klasse Convert:

staticString^ Format(String^ format, ... array<Object^>^ args);

Dieser Methode übergibt man als Argument für format einen String mit Format­angaben für die anschließend folgenden Argumente. Die Formatangaben bestehen im einfachsten Fall nur aus der in geschweiften Klammern angegebenen Nummer des Arguments ({0} für das erste Argument, {1} für das zweite usw.). Als Argument für args kann man eine beliebig lange Liste mit Werten nahezu beliebiger Datentypen angeben. Das Ergeb­nis ist dann der format String, in dem die Formatangaben durch die aus den Argumenten mit Convert­::ToString erzeugten Strings ersetzt wurden.

Beispiel     Wenn Left und Top die Werte 17 und 18 haben, gibt die folgende Anweisung den Text „Left=17, Top=18“ aus:

textBox1->Text=String::Format("Left={0},Top={1}",textBox1->Left,textBox1->Top);

Nicht-statische Methoden

Eine nicht statische Methode wird mit einem Objekt ihrer Klasse und meist dem Pfeiloperator -> aufgerufen.

Beispiel:    Die Methode Clear der Klasse TextBox löscht den Text der TextBox. Da ihre Deklaration

void Clear();// aus der Online-Hilfe zu TextBoxBase

kein static enthält, ist das eine nicht statische Methode. Sie wird deshalb über ein Objekt (z.B. textBox1) der Klasse TextBox mit dem Pfeiloperator aufgerufen:

textBox1->Clear();

Methoden von elementaren Datentypen

In C++/CLI sind auch elementare Datentypen wie z.B. int Klassen. Diese Klassen haben Methoden wie z.B. ToString, die den Wert in einen String konvertieren. Beim Aufruf wird aber der Punkt-Operator „.“und nicht der Pfeil-Operator verwendet.

Beispiel: Ein int-Wert kann durch

textBox1->Text=(17).ToString();

in einen String konvertiert werden. Diese Anweisung hat denselben Effekt wie

textBox1->Text=Convert::ToString(17);

Im Beispiel zur Addition von Zahlen kann man das Ergebnis auch so ausgeben:

textBox3->Text=(Convert::ToInt32(textBox1->Text) + 

Convert::ToInt32(textBox2->Text)).ToString();

Mehrzeilige TextBoxen

Eine TextBox kann mehrzeiligeTexte darstellen, wenn man ihre Eigenschaft Multiline auf true setzt (z.B. im Eigenschaftenfenster oder nach einer Markierung der CheckBox, die nach dem Anklicken des kleinen Dreiecks am oberen Rand der TextBox angezeigt wird):

Eine mehrzeilige TextBox hat am oberen und unteren Rand Ziehpunkte, mit denen man ihre Höhe verändern kann. Im Unterschied zu einer einzeiligen TextBox wird Text, der breiter als die TextBox ist, in Abhängigkeit von ihrer Breite und der gewählten Schriftart (die Eigenschaft Font) in Zeilen aufgeteilt.

textBox1->Text="Dieser Text ist breiter als die Textbox";

Die TextBox Elementfunktion

void AppendText(String^ text);

fügt den als Argument übergebenen String am Ende einer TextBox hinzu. Enthält dieser String die Zeichen "\r\n" (genau in dieser Reihenfolge), beginnt der darauf folgende Text in einer neuen Zeile. Diese Zeichen erhält man auch mit Environ­ment::NewLine. Mehrzeilige TextBoxen und AppendText werden oft zur Anzeige der Ergebnisse eines Programms verwendet. Dabei kann man ver­schiedene Strings mit dem Operator „+“ zusammenfügen.

Beispiel: Die Funktion

private:System::Void button1_Click(System::Object^ sender, System::EventArgs^  e) 

{

textBox1->AppendText((1).ToString()+"23");

textBox1->AppendText("abcd\r\n");

textBox1->AppendText("xyz"+Environment::NewLine);

textBox1->AppendText(Convert::ToString(7)+"\r\n");

textBox1->AppendText(String::Format("x={0} y={1}\r\n",17,18));

}

enthält alle bisher vorgestellten Anweisungen zur Ausgabe in einer TextBox. Sie erzeugt die folgende Ausgabe:

Zurück: Eigenschaften am Beispiel eines Labels | Weiter: Buttons und Ereignisse