Hei!
Taas pitäisi apua kysellä viisaammilta tietäjiltä. :) Alla tehtävän anti ja koodit.
Harjoitus 6.3
Muuta vanhaa laskin -ohjelmaa niin, että laskutoimitus tapahtuu aliohjelmassa. Aliohjelmaan (Function) välitetään luku1, luku2 ja laskutoimituksen kuvaava merkki.
Tee virheenkäsittely aliohjelmaan. Esim. tapaus yritetään jakaa 0:lla.
Vanhan laskimen koodi
Private Sub cmdLaske_Click() Dim Yksi As Double, Kaksi As Double Yksi = Val(txtMuuttuja1.Text) Kaksi = Val(txtMuuttuja2.Text) If optYhteenlasku.Value = True Then lblTulos1.Caption = Yksi + Kaksi End If If optVähennyslasku.Value = True Then lblTulos1.Caption = Yksi - Kaksi End If If optKertolasku.Value = True Then lblTulos1.Caption = Yksi * Kaksi End If If optJakolasku.Value = True Then lblTulos1.Caption = Yksi / Kaksi End If If optKokonaisluku.Value = True Then lblTulos1.Caption = Yksi \ Kaksi End If If optJakojäännös.Value = True Then lblTulos1.Caption = Yksi Mod Kaksi End If If optPotenssi.Value = True Then lblTulos1.Caption = Yksi ^ Kaksi End If End Sub Private Sub cmdLopeta_Click() Unload Me End Sub
Nykyinen yritelmä
Jossa siis funktion sisällä oleva laskutoimitus ei toimi.
Function Laske(Yksi As Double, Toimitus As String, Kaksi As Double) As Double Laske = "Yksi Toimitus Kaksi" End Function Private Sub cmdLaske_Click() Dim Yksi As Double Dim Kaksi As Double Dim Toimitus As String Yksi = Val(txtMuuttuja1.Text) Kaksi = Val(txtMuuttuja2.Text) If optYhteenlasku.Value = True Then Toimitus = "+" End If If optVähennyslasku.Value = True Then Toimitus = "-" End If If optKertolasku.Value = True Then Toimitus = "*" End If If optJakolasku.Value = True Then Toimitus = "/" End If If optKokonaisluku.Value = True Then Toimitus = "\" End If If optJakojäännös.Value = True Then Toimitus = "Mod" End If If optPotenssi.Value = True Then Toimitus = "^" End If lblTulos1.Caption = Laske(Yksi, Toimitus, Kaksi) End Sub Private Sub cmdLopeta_Click() Unload Me End Sub
Ei. Merkkijonossa olevaa koodia ei voi ajaa kuin muistaakseni .NETillä. Sekin tulkataan erillisenä VBScriptinä. Olen itsekin haaveillut RunVBCode -aliohjelmasta. Tämä aliohjelma tepsisi (anteeksi, sisennykset jäivät):
Function Laske(Luku1 As Double, Luku2 As Double, Toimitus As String,) As Double Select Case Toimitus Case "+" Laske = Luku1 + Luku2 Case "-" Laske = Luku1 - Luku2 Case "*" Laske = Luku1 * Luku2 Case "/" Laske = Luku1 / Luku2 Case "Mod" Laske = Luku1 Mod Luku2 End Select End Function
EDIT: Pahoittelen, koodini on suoraan sanottuna PURKKAA. En saanut parempaa.
KingOfTheWorld kirjoitti:
Ei. Merkkijonossa olevaa koodia ei voi ajaa kuin muistaakseni .NETillä. Sekin tulkataan erillisenä VBScriptinä. Olen itsekin haaveillut RunVBCode -aliohjelmasta...
KingOfTheWorld Muistit väärin!
Homma pelaa esim VB6:ssa aivan loistavasti
' Lisää referenssi: Microsoft Script Control 1.0 ' jos ei löydy niin lataa alla olevasta URL-osoitteesta ' http://www.microsoft.com/downloads/details.aspx?FamilyID=d7e31492-2595-49e6-8c02-1426fec693ac&DisplayLang=en 'Formille 1 tekstiboxi ja komentopainike Private Sub Command1_Click() Dim scriptiKone As MSScriptControl.ScriptControl Set scriptiKone = New MSScriptControl.ScriptControl strSuorita = "Sub Laske()" & vbCrLf & _ "vastaus = " & Text1.Text & vbCrLf & _ "Text1.Text = vastaus" & vbCrLf & _ "End Sub" With scriptiKone .Language = "VBScript" .AddObject "Form1", Me, True .AllowUI = True .AddCode strSuorita .Run "Laske" End With Set scriptiKone = Nothing End Sub
Thäh. Enhän minä tuommoista hokannut. En muista nähneeni tuommoista. Näin tuonlaisen skriptimaatin jossain, mutta en nähnyt missään tietoa, että tommonen ScriptControl olisi ollut. *tyhmä minä*
KingOfTheWorld kirjoitti:
Ei. Merkkijonossa olevaa koodia ei voi ajaa kuin muistaakseni .NETillä. Sekin tulkataan erillisenä VBScriptinä. Olen itsekin haaveillut RunVBCode -aliohjelmasta. Tämä aliohjelma tepsisi (anteeksi, sisennykset jäivät):
Jos nyt sotkisit vähän faktoja kehiin. .NETissä ei kyllä ajella merkkijonosta koodia saati tulkata sitä ja vielä vähemmän mitään VBScriptiä. Voit kyllä kääntää lennossa koodia assemblyksi ja ajella sieltä mitä haluat.
Tietysti voi jostain kaivaa palikan joka moistakin tekisi muttei se mitenkään .NETiin liity.
Kiitos kovasti kaikille! Sain koodin toimimaan ja myös virheenkäsittelyn lisättyä. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.