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...
MsgBox Val(txt1.Text) + Val(txt2.Text)
Tai MsgBox txt1 - - txt2
Muut operaattorit toimivat suoraan, kunhan tekstilootissa on numeerinen string ja desimaalierottimena pilkku.
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():ä ...
No vähennys tapahtuu ainakin näin :)
text1.text = (int)text2.text - (int)text3.text
Sitä ei kukaan kysynyt mutta voihan siihenkin vastata samalla :)
Eikä tapahdu.
Text1.Text = Val(Text2.Text) - Val(Text3.Text)
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.
Blaze kirjoitti:
Eikä tapahdu.
Text1.Text = Val(Text2.Text) - Val(Text3.Text)
koita ite jos et usko :)
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!
Harrastelija kirjoitti:
koita ite jos et usko :)
En usko, eikä usko kääntäjäkään: Syntax error.
Anssi, sun koodis toimii, jos korjaat temp-rivin näin:
temp = t1 + t2
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.
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 :)
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.
Oho.. niin tais olla :P
No enpä näemmä vielä vuoden harrastettuani VBtä osaa yksinkertaista vähennyslaskua!
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
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 :)
Niin niin, siinä kirjassa olikin esimerkissä monta optionbuttonia ja niistä sitten sai valita halusiko ynnätä, vähentää kettoa vai jakaa luvut keskenään.
Onhan kehno kirja, jos opetetaan määrittelemään muuttujia ilman tyyppiä.
Eipä ole kyllä paljon hyötyä tuosta määrittelystä, jos ei tyyppiä anneta. Oletushan taitaa olla kuitenkin Single?
jos tyyppiä ei anneta se on variant.
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
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.
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
No eihän tässä enää ongelmaa ollut, kunhan höpistiin vielä muuttujatyypeistä.
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).
Ja jos numeeriseen muotoon haluaa kuitenkin Valin avulla muuttaa, niin sitten voi muuttaa tekstissä olevat pilkut pisteiksi esim. Replace-funktiolla.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.