Benutzer mit den meisten Antworten
calculator

Frage
-
hallo zusammen, bin ein Vb-Anfänger, habe gerade mein erstes projekt beendet ( einen Editor) und vor kurzem habe ich mich an ein neues Projekt gewagt, ein Rechner. Irgendwie will er aber nicht funktionieren:
Dim Verfahren As Boolean Private Sub Plus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Plus.Click Verfahren(1) = True End Sub Private Sub Minus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Minus.Click Verfahren(2) = True End Sub Private Sub Mal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Mal.Click Verfahren(3) = True End Sub Private Sub Durch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Durch.Click Verfahren(4) = True End Sub Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.Click If Verfahren(1) = True Then Lösungsbox.Text = Eingabebox1.Text + Eingabebox3.Text End If If Verfahren(2) = True Then Lösungsbox.Text = Eingabebox1.Text - Eingabebox3.Text End If If Verfahren(3) = True Then Lösungsbox.Text = Eingabebox1.Text * Eingabebox3.Text End If If Verfahren(4) = True Then Lösungsbox.Text = Eingabebox1.Text / Eingabebox3.Text End If End Sub
Bitte helft mir!
- Verschoben Thorsten Dörfler Sonntag, 29. August 2010 13:26 Thema VB.NET (aus:Visual Basic 6.0 - Interoperabilität und Upgrade)
Antworten
-
Hallo,
die Text-Eigenschaften enthält Text, wie der Name schon sagt.
Und mit Texten kann man schlecht rechnen, siehe dazu
Peter Götz Erläuterungen zu einem vergleichbaren Problem in:
Ungültige Konvertierung in Typ Doble - Konvertierungsproblem beim Subtrahieren eines zuvor über Addition hinzugefügten Bereichsund "Käsekuchen" - "Apfelmus" willst Du kaum rechnen ;-)
Und wenn Du wie dort empfohlen Option Strict On aktivierst,
Einige mögliche Lösungen findest Du u. a. in
wird Dich der der auch Visual Basic Compiler darauf hinweisen.
Und Du solltest Dich mal beschäftigen mit: Typkonvertierung in Visual Basic
Taschenrechner, Ausgabe vom ErgebnisGruß Elmar
- Als Antwort vorgeschlagen Robert Breitenhofer Montag, 30. August 2010 11:42
- Als Antwort markiert Robert Breitenhofer Dienstag, 7. September 2010 08:35
-
Hallo,
hallo zusammen, bin ein Vb-Anfänger, habe gerade
mein erstes projekt beendet ( einen Editor) und vor
kurzem habe ich mich an ein neues Projekt gewagt,
ein Rechner. Irgendwie will er aber nicht funktionieren:
Erst mal solltest Du bei Deinen Projekteigenschaften
"Option Explicit " UND "Option Strict" einschalten damit
Dir Intellisense schon bei der Codeerstellung zeigt, wenn
Du Fehler bei Deklarationen machst oder mit unpassenden
Datentypen operierst.[code]
Dim Verfahren As BooleanDu deklarierst hier eine einfache Variable vom Typ Boolean.
Später versuchst Du jedoch auf ein Array Verfahren(1), Verfahren(2),
Verfahren(...) zuzugreifen, welches Du gar nicht deklariert hast.Es sollte also in Deinem Code eine Deklaration
Private Verfahren(x) as Boolean
geben, wobei x die Obergrenze des Arrays angibt.
Da die Untergrenze bei Arrays in .net immer 0 ist
wäre die Deklaration für 4 Teilvariablen Deines ArraysPrivate Verfahren(3) as Boolean
und Du hättest damit
Verfahren(0)
Verfahren(1)
Verfahren(2)
Verfahren(3)
Private Sub Plus_Click _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles Plus.ClickVerfahren(1) = True
ersetze durch
Verfahren(0) = TrueEnd Sub
Private Sub Minus_Click _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles Minus.Click
Verfahren(2) = True
ersetze durch
Verfahren(1) = TrueEnd Sub
Private Sub Mal_Click _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles Mal.Click
Verfahren(3) = True
ersetze durch
Verfahren(2) = TrueEnd Sub
Private Sub Durch_Click _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles Durch.Click
Verfahren(4) = Trueersetze durch
Verfahren(3) = TrueEnd Sub
Private Sub Button14_Click _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles Button14.Click
If Verfahren(1) = True Then
if Verfahren(0) then
Lösungsbox.Text = Eingabebox1.Text + Eingabebox3.Text
Eingabebox1.Text liefert einen String, ebenso liefert
Eingabebox3.Text einen String.
Mit Strings kann man aber nicht rechnen. Zum Rechnen
braucht man Zahlen wie z.B. Integer, Single, Double usw.Du musst also erst mal die in Deinen Textboxen stehenden
Strings überprüfen, ob sie überhaupt irgendwelche "rechenbare"
Zahlenwerte darstellen. Das kann man am besten mit den
TryParse-Funktionen der div. Datentypen, wie z.B.Dim Result as Double
if Double.TryParse(EingabeBox1.Text, Result) Then
' Inhalt von EingabeBox1.Text stellt eine Zahl dar.
else
' Inhalt von EingabeBox1.Text stellt keine Zahl dar.
end ifEnd If
If Verfahren(2) = True Then
Lösungsbox.Text = Eingabebox1.Text - Eingabebox3.TextAuch hier gilt wieder das Selbe wie oben:
Mit Strings kann man nicht rechnen. Zum
Rechnen braucht man Zahlen.End If
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort vorgeschlagen Robert Breitenhofer Montag, 30. August 2010 11:42
- Als Antwort markiert Robert Breitenhofer Dienstag, 7. September 2010 08:35
Alle Antworten
-
Hallo,
die Text-Eigenschaften enthält Text, wie der Name schon sagt.
Und mit Texten kann man schlecht rechnen, siehe dazu
Peter Götz Erläuterungen zu einem vergleichbaren Problem in:
Ungültige Konvertierung in Typ Doble - Konvertierungsproblem beim Subtrahieren eines zuvor über Addition hinzugefügten Bereichsund "Käsekuchen" - "Apfelmus" willst Du kaum rechnen ;-)
Und wenn Du wie dort empfohlen Option Strict On aktivierst,
Einige mögliche Lösungen findest Du u. a. in
wird Dich der der auch Visual Basic Compiler darauf hinweisen.
Und Du solltest Dich mal beschäftigen mit: Typkonvertierung in Visual Basic
Taschenrechner, Ausgabe vom ErgebnisGruß Elmar
- Als Antwort vorgeschlagen Robert Breitenhofer Montag, 30. August 2010 11:42
- Als Antwort markiert Robert Breitenhofer Dienstag, 7. September 2010 08:35
-
Hallo,
hallo zusammen, bin ein Vb-Anfänger, habe gerade
mein erstes projekt beendet ( einen Editor) und vor
kurzem habe ich mich an ein neues Projekt gewagt,
ein Rechner. Irgendwie will er aber nicht funktionieren:
Erst mal solltest Du bei Deinen Projekteigenschaften
"Option Explicit " UND "Option Strict" einschalten damit
Dir Intellisense schon bei der Codeerstellung zeigt, wenn
Du Fehler bei Deklarationen machst oder mit unpassenden
Datentypen operierst.[code]
Dim Verfahren As BooleanDu deklarierst hier eine einfache Variable vom Typ Boolean.
Später versuchst Du jedoch auf ein Array Verfahren(1), Verfahren(2),
Verfahren(...) zuzugreifen, welches Du gar nicht deklariert hast.Es sollte also in Deinem Code eine Deklaration
Private Verfahren(x) as Boolean
geben, wobei x die Obergrenze des Arrays angibt.
Da die Untergrenze bei Arrays in .net immer 0 ist
wäre die Deklaration für 4 Teilvariablen Deines ArraysPrivate Verfahren(3) as Boolean
und Du hättest damit
Verfahren(0)
Verfahren(1)
Verfahren(2)
Verfahren(3)
Private Sub Plus_Click _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles Plus.ClickVerfahren(1) = True
ersetze durch
Verfahren(0) = TrueEnd Sub
Private Sub Minus_Click _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles Minus.Click
Verfahren(2) = True
ersetze durch
Verfahren(1) = TrueEnd Sub
Private Sub Mal_Click _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles Mal.Click
Verfahren(3) = True
ersetze durch
Verfahren(2) = TrueEnd Sub
Private Sub Durch_Click _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles Durch.Click
Verfahren(4) = Trueersetze durch
Verfahren(3) = TrueEnd Sub
Private Sub Button14_Click _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles Button14.Click
If Verfahren(1) = True Then
if Verfahren(0) then
Lösungsbox.Text = Eingabebox1.Text + Eingabebox3.Text
Eingabebox1.Text liefert einen String, ebenso liefert
Eingabebox3.Text einen String.
Mit Strings kann man aber nicht rechnen. Zum Rechnen
braucht man Zahlen wie z.B. Integer, Single, Double usw.Du musst also erst mal die in Deinen Textboxen stehenden
Strings überprüfen, ob sie überhaupt irgendwelche "rechenbare"
Zahlenwerte darstellen. Das kann man am besten mit den
TryParse-Funktionen der div. Datentypen, wie z.B.Dim Result as Double
if Double.TryParse(EingabeBox1.Text, Result) Then
' Inhalt von EingabeBox1.Text stellt eine Zahl dar.
else
' Inhalt von EingabeBox1.Text stellt keine Zahl dar.
end ifEnd If
If Verfahren(2) = True Then
Lösungsbox.Text = Eingabebox1.Text - Eingabebox3.TextAuch hier gilt wieder das Selbe wie oben:
Mit Strings kann man nicht rechnen. Zum
Rechnen braucht man Zahlen.End If
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort vorgeschlagen Robert Breitenhofer Montag, 30. August 2010 11:42
- Als Antwort markiert Robert Breitenhofer Dienstag, 7. September 2010 08:35
-
Hallo Jedi,
das ist zwar keine direkte Antwort auf deine Frage aber ein Denkanstoß. Kennst du einen Taschenrechner der mehrer Displays hat?
Eigentlich erwartet man doch von einem Claculator, dass man einen Zahl eingibt (wenn du auch Kommazahlen zulassen möchtest, sollten deine Vataiblen keine Integer-Variblen sein).Dann solltest du dir Gedanken machen, ob dein Rechner "nur" per Mausklick oder auch auf Tastendruck funktionieren soll. Den Erfolg deiner Berechnungen kannst du ja separat (z.B. in Labels ausgeben) von einem Calculator erwartet man aber ein Display.
Liebe Grüße Stefan -
vielen Dank allen auch für die Links, doch habe ich gemerkt, dass ich nicht unbedingt konvertieren muss mit Folgendem Code funktioniert er ( nur mit der Array-Änderung)
Public Class Form4 Dim Verfahren(3) As Boolean Private Sub Plus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Plus.Click Verfahren(0) = True End Sub Private Sub Minus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Minus.Click Verfahren(1) = True End Sub Private Sub Mal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Mal.Click Verfahren(2) = True End Sub Private Sub Durch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Durch.Click Verfahren(3) = True End Sub Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.Click If Verfahren(0) = True Then Lösungsbox.Text = Eingabebox1.Text + Eingabebox3.Text End If If Verfahren(1) = True Then Lösungsbox.Text = Eingabebox1.Text - Eingabebox3.Text End If If Verfahren(2) = True Then Lösungsbox.Text = Eingabebox1.Text * Eingabebox3.Text End If If Verfahren(3) = True Then Lösungsbox.Text = Eingabebox1.Text / Eingabebox3.Text End If End Sub End Class
-
Hallo,
doch habe ich gemerkt, dass ich nicht unbedingt konvertieren muss
auch wenn es "funktioniert", solltest Du die Tipps und Hinweise annehmen. Zumindest, wenn Du mal in die richtige Programmierung einsteigen solltest. Es wird Dir das Leben enorm erleichtern, wenn Du mal einen Fehler suchst.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Hallo,
vielen Dank allen auch für die Links, doch habe ich gemerkt,
dass ich nicht unbedingt konvertieren mussGenau das solltest Du aber unbedingt.
Schalte bei Deinen Objekteigenschaften mal
Option Explicit und Option Strict ein.mit Folgendem Code funktioniert er ( nur mit der Array-Änderung)
Public Class Form4 ... schnipp... Private Sub Button14_Click _ (ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles Button14.Click If Verfahren(0) = True ThenHier solltest Du einfach schreiben If Verfahren(0) then
Lösungsbox.Text = Eingabebox1.Text + Eingabebox3.Text End If
Lösungsbox.Text erwartet einen String. Von Eingabebox1.Text und in Eingabebox3.Text bekommst Du ebenfalls Strings. Diese Strings können, aber müssen nicht unbedingt Ausdrücke sein, welche eine Zahl darstellen. Offenbar möchtest Du aber doch zwei Zahlen aber eben nicht zwei Strings addieren. Wenn Eingabebox1.Text und Eingabebox3.Text jeweils eine Zahlendarstellung enthalten, dann solltest Du diese erst in numerische Datentypen (z.B. via Double.TryParse) umwandeln und dann mit den so erhaltenen numerischen Werten rechnen. Mit Strings, wie Du es machst kann man nicht rechnen. Welches Ergebnis würdest Du denn bei nachfolgender Rechnung erwarten? Dim Ergebnis as String = "Käsekuchen" + "Apfelmus" Du würdest in Ergebnis den String "KäsekuchenApfelmus" erhalten. Wobei die für VB.net richtigerer Schreibweise Dim Ergebnis as String = "Käsekuchen" & "Apfelmus" das selbe Ergebnis liefern würde. Strings werden in VB.net mit dem Plus-Operator (&) verknüpft. Die Verknüpfung von Strings mit dem Plus-Operator (+) ist lediglich aus Kompatibiliätsgründen vorhanden und sollte der besseren Lesbarkeit und auch noch aus anderen Gründen besser nicht verwendet werden. Sinnvoller wäre wohl doch etwas wie Dim Ergebnis as Double = 25.3 + 17
If Verfahren(1) = True Then Lösungsbox.Text = Eingabebox1.Text - Eingabebox3.Text
Spätestens jetzt dürfte Dein vorstehender Code einen Fehler auslösen, da man Strings nicht subtrahieren kann. Im Gegensatz zu der aus Kompatibilitätsgründen vorhandenen Möglichkeit Strings via Plus-Operator (+) zu verknüpfen, gibt es für Strings keinen Minus-Operator (-).
End If If Verfahren(2) = True Then Lösungsbox.Text = Eingabebox1.Text * Eingabebox3.Text
Auch hier verwendest Du einen für Strings nicht vorhandenen Operator, nämlich den *. Auch hier solltest Du überlegen, welches Ergebnis "Käsekuchen" * "Apfelmus" liefern sollte. Also erst mal die Strings, welche Zahlen darstellen zu echten numerischen Werten (z.B. Double) umwandeln und erst dann damit rechnen.
End If If Verfahren(3) = True Then Lösungsbox.Text = Eingabebox1.Text / Eingabebox3.Text
Was für - und * gilt, gilt ebenso für /. Auch diesen Operator gibt es nicht für Strings.
End If End Sub End Class
Wie schon in meiner früheren Antwort erwähnt, solltest Du Dir
unbedingt mal die Online-Hilfe zu den Umwandlungsfunktionen
.TryParse und/oder .Parse der verschiedenen Datentypen ansehen
und diese dann auch sinnvoll einsetzen, anstatt zu versuchen
"Käsekuchen" und "Apfelmus" zu multiplizieren oder sonstwie
zu vergewaltigen.
Und auch nochmal der Hinweis, bei allen Deinen Projekten
Option Explicit und Option Strict einzuschalten.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen) -
Ja hab natürlich es nicht dabei belassen, hab es so gemach:
If Verfahren(0) = True Then Lösungsbox.Text = CType(Eingabebox1.Text, Double) + CType(Eingabebox3.Text, Double) End If If Verfahren(1) = True Then Lösungsbox.Text = CType(Eingabebox1.Text, Double) - CType(Eingabebox3.Text, Double) End If If Verfahren(2) = True Then Lösungsbox.Text = CType(Eingabebox1.Text, Double) * CType(Eingabebox3.Text, Double) End If If Verfahren(3) = True Then Lösungsbox.Text = CType(Eingabebox1.Text, Double) / CType(Eingabebox3.Text, Double) End If
Zudem hab ich noch Folgendes hinzugefügt, funktioniert aber nicht ganz , soll prüfen obs ne Zahl ist:
If Not Double.TryParse(Eingabebox1.Text) Then MessageBox.Show("Sie müssen eine Zahl eingeben!", "Fehler", MessageBoxButtons.OK) End If If Not Double.TryParse(Eingabebox3.Text) Then MessageBox.Show("Sie müssen eine Zahl eingeben!", "Fehler", MessageBoxButtons.OK) End If
-
Hallo,
Ja hab natürlich es nicht dabei belassen,
hab es so gemach:Und warum machst Du es nicht so, wie aus gutem
Grunde vorgeschlagen?[code]
If Verfahren(0) = True Then
Lösungsbox.Text = CType(Eingabebox1.Text, Double) + CType(Eingabebox3.Text, Double)Hast Du mal überlegt, was passiert, wenn Eingabebox1.Text
und/oder Eingabebox3.Text irgendeinen String enthalten, der
sich via cType() nicht zu einem numerischen Wert wie Double
umwandeln lässt?Dein Code wird einen Fehler auslösen, den Du aber nicht
behandelst. Ergebnis ist, dass Dein Programm mit einer
Fehlermeldung abstürzt.End If
... schnipp...
Zudem hab ich noch Folgendes hinzugefügt,
Wo hast Du das hinzugefügt?
funktioniert aber nicht ganz , soll prüfen obs ne Zahl ist:
[code]
If Not Double.TryParse(Eingabebox1.Text) Then
Da solltest Du Dir mal die Online-Hilfe zu Double.TryParse()
ansehen und Dein Code würde dann eher so aussehen:Dim Value as Double
If Double.TryParse(EingabeBox1.Text, Value) then
' EingabeBox1.Text enthält eine Zahlendarstellung
' Rechne was
else
' EingabeBox1.Text enthält keine Zahlendarstellung
' MsgBox("Sie Müssen eine Zahl eingeben")
End ifMessageBox.Show("Sie müssen eine Zahl eingeben!", "Fehler", MessageBoxButtons.OK)
End If
If Not Double.TryParse(Eingabebox3.Text) Then
MessageBox.Show("Sie müssen eine Zahl eingeben!", "Fehler", MessageBoxButtons.OK)
End IfDeine Abfragen auf Not Double.TryParse wären im Prinzip schon
ok, die Frage bleibt jedoch, wie und wann rufst Du diese Abfragen
in Deinem Code auf?Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)