endrebjo Skrevet 6. desember 2004 Del Skrevet 6. desember 2004 Hvorfor får jeg "Compile Error: Method or Data Member not found" på dette? (.Value er markert ved debug) Private Sub cmdPi_Click() Dim Pi As Double Pi = "3,1415926535897932384626433832795" If frmOptions.chkPiIPrim.Value = 1 Then txtPrim.Text = Pi ElseIf frmOptions.chkPiISek.Value = 1 Then txtSek.Text = Pi ElseIf frmOptions.chkPiISum.Value = 1 Then txtSum.Text = Pi End If End Sub cmdPi skal legge inn verdien Variablen Pi i en eller flere TextBox'er om den gitte CheckBox'en er haket av (Value = 1). ChechBox'ene ligger i en frame (har det noe å si?) i formen frmOptions Lenke til kommentar
Jonas Skrevet 6. desember 2004 Del Skrevet 6. desember 2004 Hmm ... Jeg ser ingen feil med .Value Sikker på at det er checkbokser du har satt inn? Det jeg ser er at du har dimmet Pi som Double, men gir den en string-verdi. Dim den As String, så får du med alle desimalene. Lenke til kommentar
endrebjo Skrevet 6. desember 2004 Forfatter Del Skrevet 6. desember 2004 (endret) Da jeg slettet CheckBox'ene og la dem inn på nytt igjen funket alt som bare juling igjen. Jonas: Hva mente du med at jeg ga Pi Sting-verdi? Hvor gjorde jeg det? Kan jeg Dim'e Pi som Sting når jeg skal regne med den da? Endret 6. desember 2004 av endrebjorsvik89 Lenke til kommentar
trrunde Skrevet 6. desember 2004 Del Skrevet 6. desember 2004 For å lagre som string i stedenfor double skriver du dim pi as string for å regne med string må du ha val foran f.eks msgbox(val(pi)*2) viser en meldingsboks med pi*2 Lenke til kommentar
DargarWhiteFang Skrevet 7. desember 2004 Del Skrevet 7. desember 2004 Da jeg slettet CheckBox'ene og la dem inn på nytt igjen funket alt som bare juling igjen. Jonas: Hva mente du med at jeg ga Pi Sting-verdi? Hvor gjorde jeg det? Kan jeg Dim'e Pi som Sting når jeg skal regne med den da? Du definerer Pi som double, men når du gir den en verdi så bruker du "quote" tegnene, og disse forteller VB at det er en string, eller? Alltså isteden for å gjøre slik Pi = "3,1415926535897932384626433832795" så gjør slik Pi = 3,1415926535897932384626433832795 (Hva med komma? kan man bruke komma eller må man bruke punktum eller er det avhengig av maskin-innstillingene?) Lenke til kommentar
aadnk Skrevet 7. desember 2004 Del Skrevet 7. desember 2004 Man skal ALLTID bruke punktum som desimaltegn - uavhengig av de regionale instillningene. Bare tenk deg konsekvensene hvis dette ikke var tilfellet; da ville man bare kunne komplimere kode hvis pcen var stilt inn nøyaktig etter det den var under utviklingen. Lenke til kommentar
endrebjo Skrevet 7. desember 2004 Forfatter Del Skrevet 7. desember 2004 (endret) Alt funket plutselig fint da jeg slettet CheckBox'ene og la inn nye. Dargar: Takk! Når jeg tar vekk "" må jeg skrive punktum (.) i stedet for komma (,), men når programmet kjøres blir det uansett komma i TextBox'ene (har med OS-innstillinger). Forresten, hvilken kommando er den beste å bruke for å lukke et program. Jeg har prøvd med både Unload Me og Me End, men i begge tilfeller ligger programmet fremdeles i Prosess-listen i Win2000. Når vi allikevel er igang: Er det noen som har forslag/tips til endringer som kan gjøre kalkulatoren enda mer brukervannlig/raskerere å bruke? Se vedlagt arkiv. Endret 7. desember 2004 av endrebjorsvik89 Lenke til kommentar
aadnk Skrevet 7. desember 2004 Del Skrevet 7. desember 2004 Svært bra, endrebjorsvik89. Programmet er ypperlig til å regne med - enkel og oversiktelig. Men det er dog noen ørsmå irritasjonsmomenter som muligens burde utbedres: Regning med potens viser ikke hele utregningen - bare summen, selv om programmet ikke er innstilt til det. Du kan faktisk bruke operatøren "^" til å regne ut potenser. Bruk ValEx (funksjon vedlagt) når du henter verdier fra tekstbokser, slik at du unngår feil ved eventuell inntasting av bokstaver. "Option Explicit" kan være svært nyttig, spesielt for å hindre unødvendige bugger. Koden er imidlertid solid og god, og du navngir alle objekter og variabler hensiktsfult. Bra! Fortsett med det. Her har du koden til ValEx, en funksjon som konverterer "1,1" til 1,1. Dette er noe den vanlige funksjonen Val mangler, som bare forstår punktum som desimalseperator. Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long Const LOCALE_USER_DEFAULT = &H400 Const LOCALE_SMONDECIMALSEP = &H16 Public Property Get DecimalSeparator() As String DecimalSeparator = GetUserLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SMONDECIMALSEP) End Property Private Function GetUserLocaleInfo(ByVal dwLocaleID As Long, ByVal dwLCType As Long) As String Dim sReturn As String, ret As Long ret = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn)) If ret Then sReturn = Space$(ret) ret = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn)) If ret Then GetUserLocaleInfo = Left$(sReturn, ret - 1) End If End If End Function Public Function ValEx(Text As String) As Double ValEx = Val(Replace(Text, DecimalSeparator, ".")) End Function Lenke til kommentar
endrebjo Skrevet 7. desember 2004 Forfatter Del Skrevet 7. desember 2004 Du kan faktisk bruke operatøren "^" til å regne ut potenser Jeg som endelig hadde lært meg loop, jaja. Bruk ValEx (funksjon vedlagt) når du henter verdier fra tekstbokser, slik at du unngår feil ved eventuell inntasting av bokstaver. "Option Explicit" kan være svært nyttig, spesielt for å hindre unødvendige bugger. ...masse stilig kode som jeg ikke forstår så veldig mye av... Jeg prøvde å lime den rett inn, men første "avsnitt" (Private Declare Function...) legger seg sammen med en av de andre funksjonene/avsnittene (vet ikke hva jeg skal kalle det, mellom de lange strekene liksom) i kodeboksen, f.eks cmdPotens og lager feil (Kommando etter End Sub, eller noe liknende). Er det slik at den nekter alle kommandoene å kjøre om det står bokstaver i TextBox'ene? Hva er "Option Explicit"? Hva mente du med ValEx og konvertering av "1,1" til 1,1? (at jeg da kan bruke 3,14 med komma uten "", istedetfor å bruke punktum når jeg tar vekk ""?) Og se forøvrig et annet spørsmål jeg editerte midt inni den forrige posten min om du har tid. Lenke til kommentar
aadnk Skrevet 7. desember 2004 Del Skrevet 7. desember 2004 (endret) Koden må limes inn helt øverst i Index-formen, altså omtrent som dette: Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long Const LOCALE_USER_DEFAULT = &H400 Const LOCALE_SMONDECIMALSEP = &H16 Public Property Get DecimalSeparator() As String [... blir litt mye å gjenta hele koden ...] Public Function ValEx(Text As String) As Double ValEx = Val(Replace(Text, DecimalSeparator, ".")) End Function Private Sub cmdKvadrat_Click() Dim Ledd As Double, Sum As Double Ledd = txtPrim.Text Sum = Ledd * Ledd If frmOptions.optSporsmalSvar.Value = True Then txtSum.Text = "Kvadratet av " & Ledd & " = " & Sum ElseIf frmOptions.optBareSvar.Value = True Then txtSum.Text = Sum End If [...] Du kan avslutte et program på to måter. Enten den direkte, ikke anbefalte metoden: ' Du risikerer at mye allokert minne ikke gis tilbake til operativsystemet; spesielt i Win9x. End Eller denne: Dim Form As Form For Each Form In Forms Unload Form Next Den siste går igjennom alle åpne former og lukker dem. Når VB registerer at ingen former er lastet inn i prosjektet, og ingenting kjører, anroper den deallokeringsprossedyren som avslutter prosjektet. Det jeg mente med ValEx-funksjonen, er at den fikser et stort problem med funksjonen Val. Det har seg nemlig slik at Val kun støtter konvertering av tall med punktum som desimalseperator; den stopper konsekvent med komma og lignede. Det betyr at hvis vi brukte Val på denne måten, så ville vi fått tallet to som sum hvis brukeren skrev "1,6" i primærboksen og "1,9" i sekundærboksen: Private Sub cmdProsent_Click() Dim Ledd As Double, Ledd2 As Double, Sum As Double Ledd = Val(txtPrim.Text) ' Fjerner alle bokstaver Ledd2 = Val(txtSek.Text) [...] Du må altså legge inn ValEx og bruke denne koden for at det skal fungere: Private Sub cmdProsent_Click() Dim Ledd As Double, Ledd2 As Double, Sum As Double Ledd = ValEx(txtPrim.Text) ' Fjerner alle bokstaver. Tar ikke med komma hvis dette er desimalseperatoren. Ledd2 = ValEx(txtSek.Text) [...] Endret 30. desember 2004 av aadnk Lenke til kommentar
endrebjo Skrevet 7. desember 2004 Forfatter Del Skrevet 7. desember 2004 (*savne en takke-og-bukke-smilet*) Lenke til kommentar
zypher_ut Skrevet 30. desember 2004 Del Skrevet 30. desember 2004 Dim Form As Form For Each Form In Forms Unload Me Next Da jeg prøvde dette, så fikk jeg beskjed om at jeg ikke kunne gjøre det med Me. Jeg bytta ut Me med Form, og da funka det.. mulig det er feil måte å gjøre det på, men det funka i hvertfall her Lenke til kommentar
aadnk Skrevet 30. desember 2004 Del Skrevet 30. desember 2004 Da jeg prøvde dette, så fikk jeg beskjed om at jeg ikke kunne gjøre det med Me. Jeg bytta ut Me med Form, og da funka det.. mulig det er feil måte å gjøre det på, men det funka i hvertfall her Uff, enkelte ganger kan det gå litt fort i svingene. Du har så absolutt rett - det skal stå Form, ikke Me. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå