randomguy111 Skrevet 17. september 2008 Del Skrevet 17. september 2008 (endret) Hei Jeg prøvde meg for første gang på visual basic idag, som jeg lastet ned gratis. Etter mye om og men klarte jeg endelig å få til en applikasjon som gjør en enkel utregning. Det jeg lurer på er ganske enkelt(?) hvorfor jeg ikke får desimaltall i svaret som kommer i "Label1"? Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dim1 As Integer dim1 = 100 / Text1.Text Label1.Text = (dim1) End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub Endret 17. september 2008 av randomguy111 Lenke til kommentar
aadnk Skrevet 17. september 2008 Del Skrevet 17. september 2008 (endret) Det jeg lurer på er ganske enkelt(?) hvorfor jeg ikke får desimaltall i svaret som kommer i "Label1"?Da må du bruke en annen datatype enn Integer. I VB.NET (og .NET-rammeverket for øvrig) er det kun Single, Double og Decimal som er flyttall - altså, at de kan bestå av desimaltall/komma. Du bør også på et tidspunkt (eller forby det fullstendig) forsikre deg om at tekstboksen er et gyldig tall: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Value As Double ' Du bør gi variablene dine meningsfulle navn. Endre dette til noe annet. ' Koden innimellom IF og End IF kjøres KUN dersom TryParse returnerer True (1), hvilket er når den gitte tekst (i tekstboksen) ' er et gyldig tall. I så tilfelle lagres tallet i den andre variabel (Value). If Double.TryParse(Text1.Text, Value) Then Label1.Text = 100 / Value ' Likeså med kontroller End If End Sub Bruk Decimal om du har behov for nøyaktig presisjon (med Single og Double vil store tall rundes av til nærmeste tier- hundreposisjon pga. måten de lagres i minnet), samt å unngå ulempen med binære verdier, eksempelvis når en har å gjøre med valutta. Single tar mindre plass og ressurser, men er den datatypen som besitter minst presisjon og høyde av de tre. I de fleste tilfeller bør Double være tilstrekkelig. Endret 17. september 2008 av aadnk Lenke til kommentar
randomguy111 Skrevet 18. september 2008 Forfatter Del Skrevet 18. september 2008 Ok mange takk for bra svar, jeg fikk det til nå! Men en ny problemstilling som nå dukket opp var hvordan får jeg bare to desimaler i svaret? Lenke til kommentar
aadnk Skrevet 18. september 2008 Del Skrevet 18. september 2008 Ok mange takk for bra svar, jeg fikk det til nå! Men en ny problemstilling som nå dukket opp var hvordan får jeg bare to desimaler i svaret? Bruk Math.Round: Label1.Text = Math.Round(100 / Value, 2) Lenke til kommentar
randomguy111 Skrevet 18. september 2008 Forfatter Del Skrevet 18. september 2008 Nok en gang, mange takk!! Lenke til kommentar
randomguy111 Skrevet 18. september 2008 Forfatter Del Skrevet 18. september 2008 Hvordan lager jeg en "clear"-button? Helst en som tømmer både text1 og text2 samtidig. Lenke til kommentar
NikkaYoichi Skrevet 18. september 2008 Del Skrevet 18. september 2008 if button text1.text = "" and text2.txt ="" end if Dette er altså ikke eksekverbar kode, men slik tenker jeg. Har ikke vb foran meg her slik at jeg får laget kode du kan kopiere. Lenke til kommentar
GeirGrusom Skrevet 18. september 2008 Del Skrevet 18. september 2008 text1.Text = "" text2.Text = "" Lenke til kommentar
InjB Skrevet 18. september 2008 Del Skrevet 18. september 2008 aadnk, skjønner egentlig ikke vitsen i å quote hele posten som er rett over deg? Lenke til kommentar
randomguy111 Skrevet 18. september 2008 Forfatter Del Skrevet 18. september 2008 Takk igjen, fiksa det Men når jeg debugger så fryser hele applikasjonen, hvis jeg trykker på button1 uten å ha skrevet noe i text1 eller text2. Det funker imidlertid helt fint hvis jeg taster inn tall i begge boksene.. Koden ser forøvrig slik ut: Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dim1 As Single dim1 = Text1.Text * Text2.Text Label4.Text = Math.Round(100 / Text2.Text, 2) Label8.Text = Text1.Text Label10.Text = Math.Round(Label8.Text - Label4.Text, 2) Label12.Text = Math.Round(100 / Text1.Text, 2) Label3.Text = Math.Round(Text2.Text / Label12.Text - 1, 2) Label14.Text = Text2.Text Label16.Text = Label3.Text * 100 End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Text1.Text = "" Text2.Text = "" End Sub End Class Hvordan kan jeg gjøre så dette ikke skjer? Lenke til kommentar
InjB Skrevet 18. september 2008 Del Skrevet 18. september 2008 (endret) Hva med.. Dim fail as Boolean If Textbox1.text or Textbox2.text = "" then messagebox.show("Skriv noe i tekstboksene") fail = false while fail = false application.doevents end while Hvis du har denne koden i button1, må du huske å ha fail = true som den første koden i knappen. Endret 18. september 2008 av InjB Lenke til kommentar
randomguy111 Skrevet 18. september 2008 Forfatter Del Skrevet 18. september 2008 nå henger den seg ikke opp lenger, men messageboks "Skriv noe i tekstboksene" kommer opp uansett når jeg trykker button1 i debug. vet dog ikke om jeg plasserte koden riktig: Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dim1 As Single Dim fail As Boolean If Text1.Text Or Text2.Text = "" Then MessageBox.Show("Skriv noe i tekstboksene") fail = False While fail = False Application.DoEvents() End While End If fail = True dim1 = Text1.Text * Text2.Text Label4.Text = Math.Round(100 / Text2.Text, 2) Label8.Text = Text1.Text Label10.Text = Math.Round(Label8.Text - Label4.Text, 2) Label12.Text = Math.Round(100 / Text1.Text, 2) Label3.Text = Math.Round(Text2.Text / Label12.Text - 1, 2) Label14.Text = Text2.Text Label16.Text = Label3.Text * 100 End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Text1.Text = "" Text2.Text = "" End Sub End Class Lenke til kommentar
Manfred Skrevet 18. september 2008 Del Skrevet 18. september 2008 Kan du være så snill å lære deg å bruke sånne? Lenke til kommentar
InjB Skrevet 18. september 2008 Del Skrevet 18. september 2008 Kommer messageboxen uansett? Skriv noe i tekstboksene, og trykk button1. kommer det da? Lenke til kommentar
randomguy111 Skrevet 18. september 2008 Forfatter Del Skrevet 18. september 2008 Kommer messageboxen uansett? Skriv noe i tekstboksene, og trykk button1. kommer det da? jepp det kommer uansett om jeg har skrevet noe i tekstboksene eller ikke, bare jeg trykker button1 Lenke til kommentar
InjB Skrevet 18. september 2008 Del Skrevet 18. september 2008 (endret) Prøv med: Dim fail as Boolean If Textbox1.text = "" then messagebox.show("Skriv noe i tekstboksen(e)") fail = false while fail = false application.doevents end while elseIf Textbox2.text = "" then messagebox.show("Skriv noe i tekstboksen(e)") fail = false while fail = false application.doevents end while Endret 18. september 2008 av InjB Lenke til kommentar
randomguy111 Skrevet 18. september 2008 Forfatter Del Skrevet 18. september 2008 Prøv med: Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dim1 As Single [b] Dim fail As Boolean If Text1.Text = "" Then MessageBox.Show("Skriv noe i tekstboksen(e)") fail = False While fail = False Application.DoEvents() End While ElseIf Text2.Text = "" Then MessageBox.Show("Skriv noe i tekstboksen(e)") fail = False While fail = False Application.DoEvents() End While End If [/b] dim1 = Text1.Text * Text2.Text Label4.Text = Math.Round(100 / Text2.Text, 2) Label8.Text = Text1.Text Label10.Text = Math.Round(Label8.Text - Label4.Text, 2) Label12.Text = Math.Round(100 / Text1.Text, 2) Label3.Text = Math.Round(Text2.Text / Label12.Text - 1, 2) Label14.Text = Text2.Text Label16.Text = Label3.Text * 100 End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Text1.Text = " " Text2.Text = " " End Sub End Class Lenke til kommentar
InjB Skrevet 18. september 2008 Del Skrevet 18. september 2008 Slik som det ser ut for meg har du det ja, så skjønner ikke hva som er galt. Hva er error meldingen som kommer? Lenke til kommentar
randomguy111 Skrevet 18. september 2008 Forfatter Del Skrevet 18. september 2008 Slik som det ser ut for meg har du det ja, så skjønner ikke hva som er galt. Hva er error meldingen som kommer? nå fungerer det, dersom jeg trykker på button1 før jeg har skrevet noe i boksene for første gang. deretter trykker jeg på "clear" button, deretter på button1 igjen. da fryser hele greia. feilmeldinga som kommer i koden er: "Konvertering fra strengen 45| til typen Double er ikke gyldig." Lenke til kommentar
InjB Skrevet 18. september 2008 Del Skrevet 18. september 2008 I clear koden din må du ha: Textbox1.text = "" textbox2.text = "" Ikke mellomrom mellom "" 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å