Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: [VB6] käyttäjän antama funktio

Sivun loppuun

jaanas [13.05.2009 08:04:56]

#

Hei,
tahtoisin tehdä ohjelman, jolle käyttäjä antaa halauamansa funktion merkkijonona
esim "x^2+a" (x ja a tiedetään). . Miten tämän toteuttaisi helpoimmin ?

Grez [13.05.2009 09:10:35]

#

Otat projektiin mukaan ms scripting (Project -> References, ruksaat "Microsoft Scripting Runtime") ja ms scripting control (Project -> Components, ruksaat "Microsoft Script Control"

Sitten korvaat nuo tiedetyt arvot niitä vastaavilla luvuilla ja sitten ajat eval-funktiolla vastauksen.

Tein pienen esimerkin. Laitoin formille:

- ScriptControl (ScriptControl)
- SyöteTextbox (Textbox)
- LaskeButton (Commandbutton)
- TulosLabel (Label)

Private Arvot As New Scripting.Dictionary
Private Sub Form_Load()
    'Alustetaan arvot
    Arvot.Add "x", 7
    Arvot.Add "a", 6
End Sub

Private Sub LaskeButton_Click()
    Dim Kaava As String

    Kaava = SyöteTextbox.Text

    Dim i As Integer
    For i = 0 To Arvot.Count - 1
        Kaava = Replace(Kaava, Arvot.Keys(i), _
            Str(Arvot(Arvot.Keys(i))))
    Next

    TulosLabel.Caption = ScriptControl.Eval(Kaava)
End Sub

jaanas [13.05.2009 09:48:26]

#

Kiitos. Tuo Replace kai korvaa kaavassa esiintyvät a:n ja X:n luvuilla 6 ja 7 ?

Grez [13.05.2009 10:01:22]

#

Joo, näin tapahtuu käytännössä. Eli jo sinne nyt antaisi x^2+a kaavaksi, niin Eval-funktiolle menisi "7^2+6"

jaanas [13.05.2009 11:17:39]

#

-tuo Microsoft Scripting Runtime löytyy sieltä, mistä kerroitkin, mutta tuota
Microsoft Script Control ei löytynyt kohdasta Components. Mutta kohdasta References löytyi Microsoft Script Control 1.0. Ruksasin molemmat, mutta
kohdasta ScriptControl.Eval(Kaava) tulee käännösvirhe Variable not defined

Grez [13.05.2009 11:22:42]

#

jaanas kirjoitti:

Microsoft Script Control ei löytynyt kohdasta Components.

Kai sinulla oli ruksi pois kohdasta "Selected Items Only"?

jaanas kirjoitti:

Mutta kohdasta References löytyi Microsoft Script Control 1.0.

Jätin tosiaan versionumeron mainitsematta, kun sillä ei ole sinänsä tässä tapauksessa väliä.

Voit toki ottaa sen referensisnäkin. Silloin et voi lisätä sitä formille, mutta voit määritellä sen koodin puolella

Dim ScriptControl As New ScriptControl

Joku muu nimi voisi olla parempi, mutta laitoin nyt saman mikä esimerkissäni oli, että toimii suoraan.

jaanas [13.05.2009 11:32:57]

#

Nyt kääntäjä ei valita, mutta ohjelmaa ajaessa tulee virheilmoitus:

The operation could not be completed because the script engine has not been initialized to a valid language

jaanas [13.05.2009 12:46:40]

#

Nyt sain sen toimimaan asettamalla

ScriptControl.Language="VBScript"

Grez [13.05.2009 14:39:51]

#

Joo, se taitaa asettaa ton automaattisesti jos lisää sen formille enkä tullut testanneeksi tuota referenssien kautta käyttöä. Hyvä kun sait toimimaan.


Sivun alkuun

Vastaus

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

Tietoa sivustosta