Avatar billede rynke10 Novice
15. november 2004 - 06:23 Der er 8 kommentarer og
1 løsning

Formler i textbox

Jeg har nogle text boxe hvor brugeren indtaster nogle tal.
Brugeren vil så gerne kunne indtaste formler, d.v.s. istedet for 247 indtastes måske 200+57-10. Hvis det kun er plus og minus kan jeg rimelig nemt splitte tallene op, men hvad med gange og dividere. Skal jeg splitte tallene op og så vurdere efter de indtastede operatorer, eller er der en smart måde at regne værdien ud på?
Avatar billede joern Nybegynder
15. november 2004 - 08:33 #1
Hej.

Jeg synes det lyder som er vidtløftig idé.  Hvad nu hvis der er 7 operatorer og parenteser? 
Jeg vil anbefale en anden løsning hvor hver værdi indtastes i sin egen boks og at der mellem boksene så kan vælges en operator.

Men ellers det sædvanlige spørgsmål:  Er det en VBA-ting eller VB og i så fald hvilken version?  I VB 5 som jeg bruger findes f.eks. ikke 'split'.

M.v.h.  Jørn
Avatar billede martin_moth Mester
15. november 2004 - 10:39 #2
Du mangler en Eval() funktion - og sådan en er der ikke i VB. Så den må du selv skrive.

Men før du går i gang vil jeg give Jørn fuldstændig ret.

Hvad hvis brugeren taster

1-+-6  Hvad skal det regnes ud til?
1+*5    Hvad skal det regnes ud til?
2/0    Hvad skal det regnes ud til?
/2      Hvad skal det regnes ud til?
99999999*99999999  Hvad skal det regnes ud til?
1%&/? v7  Hvad skal det regnes ud til? (kan forhindres ved kun at tillade indtastning af tal og operatorer, klares med _Keypress)

osv
Avatar billede rynke10 Novice
16. november 2004 - 05:23 #3
Brugerens ønske er nu slet ikke så tosset. De har i forvejen et program hvor det kan lade sig gøre. Det er til en CNC-fræser! Indtaster de emnets størrelse som
200/2+(5-1) opfatter maskinen det som 104.
Noget tyder på at jeg begrænser det til plus og minus, for med paranteser, gange, dividere, kvadratrod o.s.v. bliver det vist en større opgave.
Havde håbet på at VB havde en smart funktion til at evaluere et udtryk. Jeg bruger VB6.0 så jeg kan godt bruge split.
I det program som kunden har i forvejen kan man desuden indtaste sinus, opløfte i 2'den, tage roden og bruge variabler. Indtaster man noget den ikke forstår kommer der en fejl. Jeg har tit oplevet at folk ikke kunne finde fejlen i deres indtastning, fordi de havde indtastet et o, istedet for 0 (nul). 4oo og ikke 400.
Avatar billede martin_moth Mester
16. november 2004 - 08:28 #4
Jeg er helt enid - det kunne ofte være smart! Og man kan da også - det er bare besværligt!

Først skal du sørge for, at man KUN kan taste tal og + og -. Det gør du med _keypress.

samtidigt skal du sørge for, at der ikke kommer to regneoperatorerer efter hinanden. Og at der ikke deles med nul osv osv.

Så det er bare at klø på :o)
Avatar billede joern Nybegynder
16. november 2004 - 10:05 #5
Hej.

Jeg er enig med Martin i, at det er muligt.  Men der findes mig bekendt ingen 'smart' metode.  Måske har nogen tidligere skrevet en funktion og tilbyder den til download, det kan tage nogen tid at opspore.
Jeg ville sige til min kunde:  "Det koster dig xxxx kr., vil du så stadig have det?"

I formelfeltet i et regneark kan du jo uden videre indtaste lange udtryk, når bare du kender og overholder syntaksen.

For 'mange' år siden lavede jeg til win 3.11 og med VB3 et lille træningsprogram til folkeskole-elever.  http://jkfsoft.dk/regning.htm  FreeWare

M.v.h.  Jørn
Avatar billede venne Nybegynder
17. november 2004 - 09:00 #6
Der er faktisk en uhyre nem metode. Under Project - Components tilføjer du Microsoft Script Control. På din form lægger du en ScriptControl. Nu kan du skrive fx:

  resultat = ScriptControl1.Eval("200/2+(5-1)")

Der skal selvfølgelig være noget fejlhåndtering til de brugere der ikke kan taste korrekt.
Du kan også bruge kontrollen til at lave VBScript-kode i din applikation (fx en makrofunktion), men det er en anelse mere indviklet...

Links:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/letintro.asp

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnexpvb/html/usingscriptcontrol.asp
Avatar billede venne Nybegynder
17. november 2004 - 09:02 #7
Ahr, dårligt link...

Prøv dette i stedet for det første jeg skrev:
http://msdn.microsoft.com/library/en-us/dnanchor/html/scriptinga.asp
Avatar billede rynke10 Novice
18. november 2004 - 02:46 #8
Det var jo lige hvad jeg søgte og det virker!!!
Jeg kan skrive paranteser, gange og dividere og det hele.
Noget nemmere end at skrive noget selv som kunne evaluere et udtryk. Der ville godt nok være mange ting man skulle tage højde for.
(123+5-17)/(53/2+5)-1 er = 2.52380952380952
Tror jeg ville bruge mere end 5 min på at lave en kode der kunne dele udtrykket op og udregne det rigtigt.
Mange tak!!
Avatar billede rynke10 Novice
18. november 2004 - 03:05 #9
Har leget lidt med den, den kan endda forstå sinus og cosinus.
Sin(90) kan også bruges. (resultat i radianer)
logaritme og andet sjovt virker også.
Det var virkelig en dejlig control. Rigtig glad nu.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester