kleina
Goto Top

vb Taschenrechner

hey Leute ,
bin gerade dabei ein Taschenrechner in VB zu programmieren..
hab jedoch ein kleines problem...wieso ist das ergebnis was herauskommt immer "0"?
hoffe ihr könnt mir da weiter helfen
danke schon mal im vorraus

Dim zahl As Integer
Dim erg As Integer
Dim rechnung As String


Private Sub button_gleich_Click()
'If rechnung = "subtrahieren" Then erg = Text - zahl  
If rechnung = "addieren" Then erg = Text + zahl  
Display.Text = (erg)
End Sub

Private Sub button_loeschen_Click()
Display.Text = ""  
End Sub

Private Sub button_minus_Click()
rechnug = "subtrahieren"  
'Display.Text = ""  
End Sub

Private Sub button_nr0_Click()
Text = Text + "0"  
Display.Text = (Text)
End Sub

Private Sub button_nr1_Click()
Text = Text + "1"  
Display.Text = (Text)
End Sub

Private Sub button_nr2_Click()
Text = Text + "2"  
Display.Text = (Text)
End Sub

Private Sub button_nr3_Click()
Text = Text + "3"  
Display.Text = (Text)
End Sub

Private Sub button_nr4_Click()
Text = Text + "4"  
Display.Text = (Text)
End Sub

Private Sub button_nr5_Click()
Text = Text + "5"  
Display.Text = (Text)
End Sub

Private Sub button_nr6_Click()
Text = Text + "6"  
Display.Text = (Text)
End Sub

Private Sub button_nr7_Click()
Text = Text + "7"  
Display.Text = (Text)
End Sub

Private Sub button_nr8_Click()
Text = Text + "8"  
Display.Text = (Text)
End Sub

Private Sub button_nr9_Click()
Text = Text + "9"  
Display.Text = (Text)
End Sub

Private Sub button_plus_Click()
Text = zahl
rechnung = "addieren"  
Display.Text = ""  
End Sub

Content-Key: 126972

Url: https://administrator.de/contentid/126972

Printed on: April 19, 2024 at 19:04 o'clock

Member: dog
dog Oct 13, 2009 at 08:30:12 (UTC)
Goto Top
Mal abgesehen davon, dass die einzige Arithmetik in dieser Zeile steckt:

If rechnung = "addieren" Then erg = Text + zahl

Ist die auch noch falsch face-smile
Es gibt innerhalb dieser Funktion kein Objekt Text (und wenn doch hast du vergessen es oben zu deklarieren).

Außerdem arbeitest du mit Text immer als wäre es ein String, dann musst du zum Rechnen auch ein Int draus machen:

VB6: CInt()
VB.Net: Int32.Parse()

Grüße

Max
Member: Kleina
Kleina Oct 13, 2009 at 08:36:43 (UTC)
Goto Top
ja hab ich auch schon bemerkt...hab ich wohl übersehn
hab das jez soweit hinbekommen das wenigsten das addieren funktioniert...jedoch beim subtrahieren ist das ergebnis wieder "0"


Dim zahl As Integer
Dim zahl2 As Integer
Dim erg As Integer
Dim rechnung As String


Private Sub button_gleich_Click()
If rechnung = "subtrahieren" Then erg = zahl2 - zahl  
If rechnung = "addieren" Then erg = zahl + zahl2  
Display.Text = (erg)
End Sub

Private Sub button_loeschen_Click()
Display.Text = ""  
End Sub

Private Sub button_minus_Click()
zahl = zahl2
rechnug = "subtrahieren"  
Display.Text = ""  
End Sub

Private Sub button_nr0_Click()
zahl = 0
Display.Text = (zahl)
End Sub

Private Sub button_nr1_Click()
zahl = 1
Display.Text = (zahl)
End Sub

Private Sub button_nr2_Click()
zahl = 2
Display.Text = (zahl)
End Sub

Private Sub button_nr3_Click()
zahl = 3
Display.Text = (zahl)
End Sub

Private Sub button_nr4_Click()
zahl = 4
Display.Text = (zahl)
End Sub

Private Sub button_nr5_Click()
zahl = 5
Display.Text = (zahl)
End Sub

Private Sub button_nr6_Click()
zahl = 6
Display.Text = (zahl)
End Sub

Private Sub button_nr7_Click()
zahl = 7
Display.Text = (zahl)
End Sub

Private Sub button_nr8_Click()
zahl = 8
Display.Text = (zahl)
End Sub

Private Sub button_nr9_Click()
zahl = 9
Display.Text = (zahl)
End Sub

Private Sub button_plus_Click()
zahl2 = zahl
rechnung = "addieren"  
Display.Text = ""  
End Sub
Member: Kleina
Kleina Oct 13, 2009 at 08:53:23 (UTC)
Goto Top
soo hab soweit alles hinbekommen...hätte da nur noch die frage wie ich es hinbekomme das 2 ziffern im display von meinem rechner stehen??
Member: Tommy70
Tommy70 Oct 13, 2009 at 12:12:38 (UTC)
Goto Top
Zitat von @Kleina:
soo hab soweit alles hinbekommen...hätte da nur noch die frage
wie ich es hinbekomme das 2 ziffern im display von meinem rechner
stehen??

Hallo

Wenn ich dich richtig verstehe willst du auch wenn das Ergebnis z.Bsp. nur 5 ist 05 im Display stehen haben.
Das geht in VB6 mit
Display.Text = Format(erg, "00")

Gruß
Tom
Member: Kleina
Kleina Oct 13, 2009 at 12:29:29 (UTC)
Goto Top
naja es geht nicht um das ergebnis..
ich beschreib das problem am besten etwas genauer.
also..
ich habe verschiedene button gemacht von 0-9..
wenn ich zb die 1 drücke erscheint sie im display(textfeld)..so weit so gut..
aber wenn ich eine 11 da drin haben möchte funktioniert das nicht..woran könnte das liegen??
hab bis jetzt noch keine lösung dafür gefunden..


@Tommy70: aber trotzdem danke für diesen kleinen tipp..hätte mich besser ausdrücken sollen
Member: Tommy70
Tommy70 Oct 13, 2009 at 12:41:15 (UTC)
Goto Top
Weil du den Text entsprechend zusammensetzen musst.

z.Bsp.
Man kann das ganze auch schöner lösen. Habe es hier allerdings an deinen Quellcode angepasst.

Private Sub button_nr1_Click() 
zahl =  1 
if Display.Text="0" then  
Display.Text = cstr(zahl) 
else
Display.Text =Display.Text &  cstr(zahl) 
End If
End Sub 
Member: Tommy70
Tommy70 Oct 13, 2009 at 12:55:52 (UTC)
Goto Top
Die oben erwähnte schönere Lösung wäre folgende.
Ich bleibe mal bei meiner Vermutung dass du VB6 verwendest. ;)

Du erstellst einen Button, gibst ihm einen Namen (in meinem Fall cmdZahl).
Dann kopierst diesen und fügst ihn erneut auf dem Formular ein. (Bei der Frage "Ob du ein Steuerelementefeld erstellen willst" sagst du ja.)
Das machst du bis du alle 10 Buttons (0-9) hast.

Dann fügst du folgenden Code in das Click-Ereignis des Buttons ein.

Private Sub cmdZahl_Click(Index As Integer)
If Display.Text = "0" Then  
  Display.Text = CStr(Index)
Else
  Display.Text = Display.Text & CStr(Index)
End If
End Sub

Gruß
Tom
Member: Kleina
Kleina Oct 13, 2009 at 12:57:12 (UTC)
Goto Top
danke so weit klappt das ...
nur noch ein problem..und zwar wenn ich 11+ 55 rechnen lasse kommt "6" raus..
als wenn ich 1+5 machen würde..
woran liegt das??
sry bin ein totaler anfänger was vb angeht..
Member: Tommy70
Tommy70 Oct 13, 2009 at 13:11:32 (UTC)
Goto Top
Weil du nur mit Zahl und Zahl2 rechnest und nicht mit den Werten die du ins textfeld eingegeben hast. Und da steht dann eben nur 1 + 5 drinnen.
Du musst dir den Wert aus dem Textfeld zwischenspeichern bevor du + oder - drückst.
Member: Kleina
Kleina Oct 13, 2009 at 13:19:32 (UTC)
Goto Top
ja klar..aba die zahl kommt doch per drücken der buttons ins textfeld..wie mache ich das denn das er genau diesen wert da rausliest und zwischenspeichert??
Member: Tommy70
Tommy70 Oct 13, 2009 at 13:22:26 (UTC)
Goto Top
Indem du dir diesen Wert bevor du + oder Minus drückst in eine Variable schreibst.
z.bsp.
Dim itmpZahl as integer

Private Sub button_plus_Click() 
itmpZahl =cint(Display.Text)
rechnung = "addieren"   
Display.Text = "0"   
End Sub 
Member: Tommy70
Tommy70 Oct 13, 2009 at 13:29:36 (UTC)
Goto Top
Dann noch schnell das Rechnen ;)

Private Sub button_gleich_Click() 
If rechnung = "subtrahieren" Then erg = itmpZahl - cint(Display.Text)  
If rechnung = "addieren" Then erg = itmpZahl + cint(Display.Text)  
Display.Text = cstr(erg) 
End Sub 
Member: Kleina
Kleina Oct 13, 2009 at 13:32:24 (UTC)
Goto Top
ok das "cint" steht für das auslesen aus dem textfeld richtig?
das heißt ich könnte das gleich auch für zahl2 anwenden..da dies ja der zweite wert ist den ich eingebe....beim "+" drücken leert sich ja das textfeld..und das müsste ich dann nur noch beim button"gleich" ändern das er diese 2 werte addiert..oder welche rechenoperation auch immer...
bin ich da auf dem richtigen weg??
Member: Tommy70
Tommy70 Oct 13, 2009 at 13:47:06 (UTC)
Goto Top
Das cInt steht dafür, einen String in einen Integer umzuwandeln da du ja mit Strings nicht rechnen kannst.
Normal brauchst du deine 2 Variablen Zahl und Zahl2 nicht mehr. Da du immer wenn du +, - oder = drückst sofort rechnen solltest.

Dim itmpZahl as integer

Private Sub button_plus_Click() 
rechnung = "addieren"   
if itmpZahl = 0 then
itmpZahl =cint(Display.Text)
else
button_gleich
itmpZahl =cint(Display.Text)
end if
End Sub 

Private Sub button_minus_Click() 
rechnung="subtrahieren"  
if itmpZahl = 0 then
itmpZahl =cint(Display.Text)
else
button_gleich
itmpZahl =cint(Display.Text)
end if
End Sub 

Private Sub button_gleich_Click() 
If rechnung = "subtrahieren" Then erg = itmpZahl - cint(Display.Text)  
If rechnung = "addieren" Then erg = itmpZahl + cint(Display.Text)  
Display.Text = cstr(erg) 
End Sub 

Habe das jetzt nicht getestet. Aber so ähnlich sollte es funktionieren.
Member: Kleina
Kleina Oct 13, 2009 at 14:05:01 (UTC)
Goto Top
funktioniert nicht ganz..aber ich hab das prinzip verstanden...
ich versuche noch einmal selber darauf zu kommen..
wenn ich nicht mehr weiter komme schreib ich wieder..
danke erstmal für diese hilfreichen tipps!!

;)
Member: Tommy70
Tommy70 Oct 13, 2009 at 14:27:58 (UTC)
Goto Top
Hier noch eine etwas korrigierte Version. Funktioniert zwar auch noch nicht 100%ig. Aber da solltest du jetzt weiterkommen.

Dim itmpZahl As Integer
Dim bEingabe As Boolean
Dim rechnung As String

Private Sub button_plus_Click()
rechnung = "addieren"  
If itmpZahl = 0 Then
  itmpZahl = CInt(Display.Text)
Else
  button_gleich_Click
  itmpZahl = CInt(Display.Text)
End If
Display.Text = CStr(itmpZahl)
bEingabe = False
End Sub

Private Sub button_minus_Click()
rechnung = "subtrahieren"  
If itmpZahl = 0 Then
  itmpZahl = CInt(Display.Text)
Else
  button_gleich_Click
  itmpZahl = CInt(Display.Text)
End If
Display.Text = CStr(itmpZahl)
bEingabe = False
End Sub

Private Sub button_gleich_Click()
Dim erg As Integer
If rechnung = "subtrahieren" Then erg = itmpZahl - CInt(Display.Text)  
If rechnung = "addieren" Then erg = itmpZahl + CInt(Display.Text)  
Display.Text = CStr(erg)
bEingabe = False
End Sub
Member: Kleina
Kleina Oct 14, 2009 at 08:43:13 (UTC)
Goto Top
soo habe mein taschenrechner soweit das er die grundrechen arten kann..
aber wie mache ich das ich dezimalzahlen ins display bekomme, wobei der button "." benutzt werden soll..
und das das ergebnis auch als dezimalzahl dargestellt werden kann?? zB. "1.2"
Member: Tommy70
Tommy70 Oct 14, 2009 at 09:08:34 (UTC)
Goto Top
Hallo,

wieso dachte ich mir gestern schon dass das bald kommen wird? ;)

Da fängt es dann schon mal damit an, dass du keine Integer-Variablen mehr verwenden kannst sondern auf Double umsteigen musst.

Datentypen in VB6

Allerdings bist du mit Double auch eingeschränkt, da auch dort nur Zahlen bis zu einer gewissen Größe möglich sind.
Willst du Zahlen beliebiger Länge berechnen können musst du dir eine eigene Rechenroutine schreiben. Das würde dann allerdings für dich sicher zu weit führen.

Wenn du das ganze also wirklich vertiefen willst, dann ist dir sicher am meisten geholfen wenn du dir z.Bsp. bei Google ein Beispiel suchst.
Ein ziemlich gut dokumentiertes Projekt findest du unter http://www.activevb.de/cgi-bin/upload/download.pl?id=786

Gruß
Tom
Member: Kleina
Kleina Oct 19, 2009 at 08:25:19 (UTC)
Goto Top
soo habe alles hinbekommen..
ich danke für die vielen hilfreichen tipps..
ohne die wäre ich aufgeschmissen =)