Gå til innhold

[Løst] Feil i program. [Løst]


Anbefalte innlegg

Jeg driver å lager en AutoClicker nå. Den er nesten helt ferdig. Problemet ligger ved textboxen.

Alt funker helt fint viss man skriver et tall i textboxen. Er det ikke et tall i textboxen når man starter den så klikker

hele programmet og jeg må avslutte. Jeg har prøvd å få til en melding som "Skriv inn et tall" men får det ikke helt til.

 

Noen som vet hvordan jeg kan løse dette? :)

Endret av TheGatherer
Lenke til kommentar
Videoannonse
Annonse
Jeg driver å lager en AutoClicker nå. Den er nesten helt ferdig. Problemet ligger ved textboxen.

Alt funker helt fint viss man skriver et tall i textboxen. Er det ikke et tall i textboxen når man starter den så klikker

hele programmet og jeg må avslutte. Jeg har prøvd å få til en melding som "Skriv inn et tall" men får det ikke helt til.

 

Noen som vet hvordan jeg kan løse dette? :)

 

 

du kan jo prøve med IF kommandoen ?

du har jo ikke postet noe kode så kan ikke hjelpe deg godt nokk, men prøv med IF kommandoen i en form, post koden til knappen så kan jeg sikkert hjelpe deg litt mer

Lenke til kommentar

Når en simpel feil er nok til å bringe ned hele programmet, antar jeg at du anvender VB6. Gi lyd om dette ikke er tilfellet.

 

I alle fall må du håndtere feilaktig inndata på et vis - enten ved å forhindre inntastingen direkte (muligens det beste alternativet), eller avbryte videre kjøring uten å avslutte programmet fullstendig. Førstnevnte kan du eksempelvis oppnå ved å sette Cancel-parameteret i KeyDown-hendelsen til True når KeyCode faller utenfor vbKey0 og vbKey9, men her risikerer en at brukeren kan introdusere farlig innhold via utklippstavlen. En noe bedre fremgangsmåte er å bruke Val()-funksjonen i TextChange-hendelsen:

Private Sub Text1_Change()

   ' Lagrer vi ikke markørposisjonen, tilbakestilles denne
   ' hver gang brukeren taster inn et tall i tekstboksen (svært forstyrrende)
   Dim savedStart As Long

   With Text1
       savedStart = .SelStart
       .Text = Val(.Text)
       .SelStart = savedStart
   End With

End Sub

Er man riktig så sofistikert, kan man også benytte API-funksjoner til å forandre konfigurasjonsbiter i den underliggende Windows-kontrollen (egenskaper som ikke er implementert i VB-kontrollgrensesnittet):

http://allapi.mentalis.org/apilist/2D6E0D8...1B6CC98D14.html

 

Mener du imidlertid at det er bedre å avbryte programmet med en feilmelding, kan du også benytte IsNumeric():

Private Sub Command1_Click()

   ' Forsikre oss om at inndata er gyldig
   If IsNumeric(Text1.Text) Then
       ' Din kode her
   Else
       MsgBox "Skriv inn et tall", vbCritical, "Feil"
   End If

End Sub

Jeg vil også anbefale at du tar en titt på den mer generelle feilhåndteringsmetode i VB6 (On Error GoTo [label]). Det er svært dårlig brukervennlighet å avslutte programmet når hver minste feil inntreffer - i det minste bør du la brukeren fortsette eksekveringen, og (om du er seriøs) helst tilby en form for tilbakemelding (på eksempelvis epost) slik at du kan utbedre feilen til neste versjon. Det finnes et par middleware-programmer for dette formål (VBWatch, HuntERR), og det er heller ikke umulig å implementere denne funksjonaliteten selv.

Endret av aadnk
Lenke til kommentar
Jeg driver å lager en AutoClicker nå. Den er nesten helt ferdig. Problemet ligger ved textboxen.

Alt funker helt fint viss man skriver et tall i textboxen. Er det ikke et tall i textboxen når man starter den så klikker

hele programmet og jeg må avslutte. Jeg har prøvd å få til en melding som "Skriv inn et tall" men får det ikke helt til.

 

Noen som vet hvordan jeg kan løse dette? :)

 

 

du kan jo prøve med IF kommandoen ?

du har jo ikke postet noe kode så kan ikke hjelpe deg godt nokk, men prøv med IF kommandoen i en form, post koden til knappen så kan jeg sikkert hjelpe deg litt mer

 

 

Viss ingenting er skrevet i 'Textbox1.text' Vill jeg at det skal komme opp "Skriv inn et tall"

 

Start knapp koden: Timer1.Interval = TextBox1.Text * 1000 textbox.

Timer1.Enabled = True

 

 

If textbox1.text is nothing then msgbox("Skriv inn et tall")

første jeg tenkte men fungerte jo selvfølgelig ikke :p

 

Vet ikke helt jeg..

 

 

Når en simpel feil er nok til å bringe ned hele programmet, antar jeg at du anvender VB6. Gi lyd om dette ikke er tilfellet.

 

I alle fall må du håndtere feilaktig inndata på et vis - enten ved å forhindre inntastingen direkte (muligens det beste alternativet), eller avbryte videre kjøring uten å avslutte programmet fullstendig. Førstnevnte kan du eksempelvis oppnå ved å sette Cancel-parameteret i KeyDown-hendelsen til True når KeyCode faller utenfor vbKey0 og vbKey9, men her risikerer en at brukeren kan introdusere farlig innhold via utklippstavlen. En noe bedre fremgangsmåte er å bruke Val()-funksjonen i TextChange-hendelsen:

Private Sub Text1_Change()

   ' Lagrer vi ikke markørposisjonen, tilbakestilles denne
   ' hver gang brukeren taster inn et tall i tekstboksen (svært forstyrrende)
   Dim savedStart As Long

   With Text1
       savedStart = .SelStart
       .Text = Val(.Text)
       .SelStart = savedStart
   End With

End Sub

Er man riktig så sofistikert, kan man også benytte API-funksjoner til å forandre konfigurasjonsbiter i den underliggende Windows-kontrollen (egenskaper som ikke er implementert i VB-kontrollgrensesnittet):

<a href="http://allapi.mentalis.org/apilist/2D6E0D8...1B6CC98D14.html" target="_blank">http://allapi.mentalis.org/apilist/2D6E0D8...1B6CC98D14.html</a>

 

Mener du imidlertid at det er bedre å avbryte programmet med en feilmelding, kan du også benytte IsNumeric():

Private Sub Command1_Click()

   ' Forsikre oss om at inndata er gyldig
   If IsNumeric(Text1.Text) Then
       ' Din kode her
   Else
       MsgBox "Skriv inn et tall", vbCritical, "Feil"
   End If

End Sub

Jeg vil også anbefale at du tar en titt på den mer generelle feilhåndteringsmetode i VB6 (On Error GoTo [label]). Det er svært dårlig brukervennlighet å avslutte programmet når hver minste feil inntreffer - i det minste bør du la brukeren fortsette eksekveringen, og (om du er seriøs) helst tilby en form for tilbakemelding (på eksempelvis epost) slik at du kan utbedre feilen til neste versjon. Det finnes et par middleware-programmer for dette formål (VBWatch, HuntERR), og det er heller ikke umulig å implementere denne funksjonaliteten selv.

 

Jeg bruker Visual Basic 2008 Express edition, Sry glemte å nevne det. Ser litt på kodene.

 

Takk.

Endret av TheGatherer
Lenke til kommentar

er ikke løsningen slik vis du ikke har tastet noe i textboksen:

If textbox1.text = "" then
msgbox("skriv in et tall i tekstboksen")
elseif textbox1.text = (textbox1.text) then 

DIN KODE HER

Lenke til kommentar
er ikke løsningen slik vis du ikke har tastet noe i textboksen:

If textbox1.text = "" then
msgbox("skriv in et tall i tekstboksen")
elseif textbox1.text = (textbox1.text) then 

DIN KODE HER

 

Den funker men må fortsatt stenge programmet. Vill gjerne at alt er som før når man trykke Ok på Erroren :p

 

 

Fikk du det til da?

 

Ikke enda. La meg etter jeg posta denne.

Lenke til kommentar

Det skulle da ikke være noe problem å tilpasse kodeeksemplene mine til VB2008. Ta bare en titt på følgende:

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

   ' Lagrer vi ikke markørposisjonen, tilbakestilles denne
   ' hver gang brukeren taster inn et tall i tekstboksen (svært forstyrrende)
   Dim savedStart As Integer, savedLength As Integer

   With TextBox1
       savedStart = .SelectionStart
       savedLength = .Text.Length
       .Text = System.Text.RegularExpressions.Regex.Replace(.Text, "\D+", "")
       '' Du kan også bruke denne metoden:
       '.Text = Val(.Text)
       '.SelectionStart = savedStart
       .SelectionStart = savedStart - savedLength + .Text.Length
   End With

End Sub

Samt:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

   ' Forsikre oss om at inndata er gyldig
   If IsNumeric(TextBox1.Text) Then
       ' Din kode her
   Else
       MessageBox.Show("Skriv inn et tall", "Feil", MessageBoxButtons.OK, MessageBoxIcon.Error)
   End If

End Sub

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...