Zahlen und Textketten umwandeln, wo zu?


Christoph1972

Erfahrenes Mitglied
Hallo,

kann ich irgend wie, von Anfang an in einem Form festlegen, das Textboxen nur Zahlen liefern? Ich meine also, das ich mir das ständige wandeln CDbl (txtTextbox.Text) sparen kann und bei der anschließenden Anzeige muss ich dann den Wert wieder umwandeln mit CStr (txtTextbox.Text). Ich finde das äußerst umständlich und kann auch den Sinn und Zweck nicht verstehen. Das war doch in VB.6 auch nicht nötig, da hat es doch gereicht, wenn ich beim Variable bekannt machen ein Currency o.ä dahinter gehängt habe. Habe ich etwa etwas nicht verstanden, oder muss das tatsächlich so umständlich gemacht werden?
Ich hoffe aber das ich zu blöd bin und ihr mir zeigt, wie es einfacher geht :)


Gruß

Christoph
 

Sunray

Erfahrenes Mitglied
Also eine Textbox enthält nun mal... Text. Du müsstes deine eigene TextBox schreiben, um direkt an die Zahlen zu kommen. Einfach eine Klasse von TextBox ableiten und die nötigen Methoden/Properties implementieren.
Neben CStr gibt es ja auch noch die Object.ToString() Methode. Damit lässt sich unter anderem das Ausgabeformat der Zahl definieren.

Wozu? Naja... das ist eben Strong Typing. Was denkst du wird passieren, wenn ein User 'abc' in eine Textbox eingibt und du dann CDbl auf den String anwendest? Benutze lieber sowas:
Code:
Dim var as Double
If Not Double.TryParse(TextBox.Text,var)
   MsgBox("Nur Zahlen bitte....")
End If
 

Christoph1972

Erfahrenes Mitglied
Hallo,

es geht doch ohne CDbl oder CStr. Ich habe es einfach wie in VB.6 gemacht.
Also, mal angenommen ich habe drei Textboxen. Zwei sind für die Werteeingabe, die andere für die Ergebnissausgabe.


Dim Wert1 As Double
Dim Wert2 As Double
Dim Ergebins As Double

Wert1 = txtWert1
Wert2 = txtWert2

Ergebins = Wert1 + Wert2

txtErgebnis = Ergebnis

So funktioniert doch auch die Ausgabe ohne CDbl oder CStr. Nu frage ich mich, wo zu brauche ich CDbl und CStr? Scheint so das ich das wirklich was nicht verstanden habe.
Warum soll ich diese Strings verwenden, wenn es doch auch ohne sie geht?


Gruß


Christoph, der jetzt in Bett geht :)
 

Vektor

Erfahrenes Mitglied
es geht doch ohne CDbl oder CStr.
Hallo,

es geht aber nur ohne die Konvertierung wenn "Option Strict" auf "Off" gestellt ist.
Um dies zu ändern musst du einfach im Deklarationsbereich eines Forms, eines Moduls oder einer Klasse bevor diese Initialisiert wird "Option Strict On" bzw. "Option Strict Off" einstellen.

Ich würde aber immer mit "Option Strict On" arbeiten, da es den Code leichter zu pflegen und zu lesen macht, und nebenbei auch noch Konvertierungsfehler fast ausschließt. Da steht das bisschen Schreibarbeit die man da mehr leisten muss, doch wirklich in keinem Verhältnis zu der eingesparten Zeit beim Debuggen des Codes.

Bis dann...
 

Christoph1972

Erfahrenes Mitglied
Also, bei mir ist die Grundeinstellung Option Strict OFF. Hm........jetzt frage ich mich, was soll ich machen?
Das ich die Werteeingabe mit CDbl umwandeln muss, leuchtet mir ja noch ein. Aber wieso soll ich bei der Ergebnisausgabe mit CStr zurückwandeln? Es ist doch total egal ob der ausgegebene Wert eine Zahl oder ein Text ist. Hauptsache es wird das Selbe dargestellt, oder?

Gruß

Christoph
 

Vektor

Erfahrenes Mitglied
Es geht meiner Meinung bei der verwendung von Option Strict On und den expliziten Konvertierungfunktionen vor allem um die verbesserung der Lesbarkeit des Quellcodes und der Fehlerabsicherung. Bei einem so "simplen" Fall, wie einer Textbox etwas ohne Konvertierung durch CStr() oder .ToString zuzuweisen, macht die Verwendung wenig Sinn. Es gibt aber durchaus Sinn bei etwas verzwickteren Aktionen, z.B. wenn man eigene Strukturen und Datentypen verwendet.

Für kleinere Programme kann man daher, finde ich auf "Option Strict" und "Option Explicit" verzichten, was sich bei größeren Programmen und Codes die an andere weitergegeben werden nicht empfiehlt.

Letztendlich musst du dich halt für eine Vorgehensweise entscheiden, und am besten dabei bleiben. Ich persönlich verwende immer Option Strict On da es mir schon bei der Codeeingabe viele Fehler anzeigt die sonst erst zur Laufzeit aufgetreten wären. Und irgendwann gewöhnt man sich an die explizite Konvertierung.

kann ich irgend wie, von Anfang an in einem Form festlegen, das Textboxen nur Zahlen liefern?
Dafür würde ich einfach ein eigenes TextBox-Control schreiben. Oder du "verbietest" dem Benutzer einfach über das KeyPress-Event einer Textbox etwas anderes als Zahlen einzugeben.