Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Aivokatkos: miten plussataan textboxien sisällöt (numeroita)

Sivun loppuun

anssi [02.05.2005 00:11:19]

#

Eli jostain syystä nyt en vaan tajua...

Private Sub Command1_Click()
    Dim temp As Currency
    Dim t1 As Currency
    Dim t2 As Currency

    t1 = txt1.Text
    t2 = txt2.Text
    temp = txt1.Text + txt2.Text

    MsgBox temp

End Sub

Type Mismatch. Ei tajua...

Blaze [02.05.2005 00:50:50]

#

MsgBox Val(txt1.Text) + Val(txt2.Text)

setä [02.05.2005 08:32:40]

#

Tai MsgBox txt1 - - txt2
Muut operaattorit toimivat suoraan, kunhan tekstilootissa on numeerinen string ja desimaalierottimena pilkku.

miiro [03.05.2005 16:52:53]

#

Mutta eikös ne pidä muuttaa integereiksi. Siihenhän oli joku funkkari. EDIT: Ai niin, tietysti DataFormat, joka ei ole edes funktio, niin ja tuossahan eräs oli jo sen funkkarin kertonut, itse tosin tarkoitin CInt():ä ...

Harrastelija [03.05.2005 16:57:34]

#

No vähennys tapahtuu ainakin näin :)

text1.text = (int)text2.text - (int)text3.text

Sitä ei kukaan kysynyt mutta voihan siihenkin vastata samalla :)

Blaze [03.05.2005 17:22:59]

#

Eikä tapahdu.
Text1.Text = Val(Text2.Text) - Val(Text3.Text)

setä [03.05.2005 17:24:10]

#

Muunnosta ei tosiaan tarvi koodata vaan VB muuntaa ne automaattisesti aritmeettisia laskutoimituksia varten.
Vähennys: Text1 = Text2 - Text3
Summaus: Text1 = Text2 - - Text3
Kaksi miinusmerkkiä siksi, että plusmerkki liittää merkkijonot yhteen.
Kertolasku: Text1 = Text2 * Text3 jne.

Harrastelija [03.05.2005 17:25:47]

#

Blaze kirjoitti:

Eikä tapahdu.
Text1.Text = Val(Text2.Text) - Val(Text3.Text)

koita ite jos et usko :)

NixDu [03.05.2005 17:36:49]

#

Elikkä

pluslasku

temp = Val(txt1.Text) + Val(txt2.Text)

Vähennys

temp = Val(txt1.Text) - Val(txt2.Text)

Näillä se toimii ainakin! Jos tuota val sanaa ei laiteta niin se vain kirjoittaa ne luvut peräkkäin tulokseen!

Blaze [03.05.2005 18:04:17]

#

Harrastelija kirjoitti:

koita ite jos et usko :)

En usko, eikä usko kääntäjäkään: Syntax error.

setä [03.05.2005 18:24:41]

#

Anssi, sun koodis toimii, jos korjaat temp-rivin näin:
temp = t1 + t2

hunajavohveli [03.05.2005 18:58:45]

#

Harrastelija kirjoitti:

No vähennys tapahtuu ainakin näin :)

text1.text = (int)text2.text - (int)text3.text

Taidat muistella nyt jotain toista kieltä. VB:n syntaksi ei tue tuollaista int-konversiota.

Harrastelija [03.05.2005 20:12:21]

#

Hah! Kyllä varmana oli VB 6 professional Edition! Jollei teillä onnistunut nii kyllä mulla ainaki. Jos se on syntax error niin pyyhkikää ensin nollaksi textboxien sisällöt ja laittakaa sitten luvut siihen.

Älkää nyt pahastuko, mutta mun VB on ihmeellinen :)

setä [03.05.2005 21:36:05]

#

Harrastelija kirjoitti:

Hah! Kyllä varmana oli VB 6 professional Edition! ...

Varmaan tarkoitit
text1.text = int(text2.text) - int(text3.text)
jolloin mahdolliset desimaalit jätetään pois eli saadaan tekstiruutujen lukujen kokonaisosien erotus.

Harrastelija [04.05.2005 07:41:27]

#

Oho.. niin tais olla :P

No enpä näemmä vielä vuoden harrastettuani VBtä osaa yksinkertaista vähennyslaskua!

miiro [08.05.2005 08:58:39]

#

No minun vb6-oppaassani (Michael Halvorsonin) on tällainen esimerkki:

Private Sub Command1_Click()
Dim first, second
First = Val(Text1.Text)
Second = Val(Text2.Text)
Label1.Caption = First - Second

Harrastelija [08.05.2005 09:18:53]

#

Lasku on monimutkainen jos sillä lasketaan ainoastaan paljon on Text1.text - Text2.text

Mutta jos tarkoituksena on vielä laskea muutakin tuolla First, Secondilla niin sitten tuo on kannattavampi. Miksi suotta (ellei välttämättä halua) kirjottaa tuota, niin laittaa vaan jollain edellämaisituilla tavoilla. Idea ei ole huono mutta tämä oli vain tällainen point, jonka te kaikki varmaan käsititte :)

miiro [08.05.2005 09:22:55]

#

Niin niin, siinä kirjassa olikin esimerkissä monta optionbuttonia ja niistä sitten sai valita halusiko ynnätä, vähentää kettoa vai jakaa luvut keskenään.

Blaze [08.05.2005 12:43:49]

#

Onhan kehno kirja, jos opetetaan määrittelemään muuttujia ilman tyyppiä.

hunajavohveli [08.05.2005 13:14:38]

#

Eipä ole kyllä paljon hyötyä tuosta määrittelystä, jos ei tyyppiä anneta. Oletushan taitaa olla kuitenkin Single?

tuomas [08.05.2005 13:27:37]

#

jos tyyppiä ei anneta se on variant.

Lumi-ukkeli [08.05.2005 14:19:36]

#

tuomas kirjoitti:

jos tyyppiä ei anneta se on variant.

Mutta variant muuttuu sen mukaan mikä arvo siihen sijoitetaan?
Esim:

Dim muuttuja as Variant
muuttuja = CCur(4839.312121212)

= muuttuja on Currency-tyyppinen, koska variant-tyyppiin sijoitettiin currency tyyppinen muuttuja

tuomas [08.05.2005 14:36:55]

#

Ei. muuttuja pysyy edelleen varianttina, eli voisit seuraavalla rivillä tunkea siihen merkkijonoja, numeroita, true/false arvoja jne. Variant on siis muuttujatyyppi johon voi tunkea oikeastaan mitä vain tavaraa. Käyttö ei ole kovin suositeltavaa (varsinkaan isommissa taulukoissa), pirulainen kun syö kaikista muuttujatyypeistä muistia eniten.

tesmu [08.05.2005 23:20:49]

#

onko tuo nyt niin vaikeeta

text1.text=text2.text - text3.text
text1.text=val(text1.text)+val(text3.text)

jos noilla ei hoidu ni sit ei millään

hunajavohveli [09.05.2005 00:04:07]

#

No eihän tässä enää ongelmaa ollut, kunhan höpistiin vielä muuttujatyypeistä.

setä [09.05.2005 16:25:38]

#

Paitsi ettei Val-funktiota kannata käyttää. Jos desimaalierottimena on pilkku, Val-funktio jättää desimaalit kylmästi pois eikä ilmoittele mitään. Kun käyttää suoraan tekstiruutuja ja plussan tilalla kaksi miinusmerkkiä peräkkäin, ei tätä virhettä tule. Jos desimaalierottimena on tällöin piste (jonka Val-funktio vaatii), saadaan virheilmoitus. Jos tulos viedään tekstiruutuun tai ylipäätään tulostetaan, desimaalierottimeksi tulee pilkku (maa-asetusten mukaan).

hunajavohveli [09.05.2005 17:16:39]

#

Ja jos numeeriseen muotoon haluaa kuitenkin Valin avulla muuttaa, niin sitten voi muuttaa tekstissä olevat pilkut pisteiksi esim. Replace-funktiolla.

setä [09.05.2005 19:53:23]

#

Muunnokseen kannattaa käyttää Val-funktion sijasta Csng-funktiota (tai Cdbl tai Cint), jolloin pilkut saa olla ennallaan. Kun numeerisilla stringeillä suorittaa aritmeettisia operaatioita VB muuttaa stringit luvuiksi juuri noilla funktioilla.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta