De conversie van tekenreeks naar type Double is ongeldig.

Status
Niet open voor verdere reacties.

bonnowagt

Gebruiker
Lid geworden
7 dec 2006
Berichten
445
Ik moet een getal tussen de 1 en de 6. Dit doe ik dus via onderstaande code. Werkt op zich prima. Als ik bijv een 9 intyp komt er keurig een boodschap dat ik alleen tussen 1 en 6 mag.
Maar nu mijn probleem. Heb alles al geprobeerd, maar als ik bijvoorbeeld een letter of een streepje o.i.d. dus geen cijfer invoer krijg ik een foutmelding, namelijk

De conversie van tekenreeks (bijv: A) naar type Integer is ongeldig.


[ Dim message1, message1a, title1, defaultValue1 As String
Dim myValue1 As Object
message1 = "Voer een cijfer in tussen 1 en 6"
message1a = "U kunt alleen een getal tussen de 1 en 6 invoeren"
title1 = "Eerste getal van de code"
defaultValue1 = "0"

myValue1 = InputBox(message1, title1, defaultValue1, 600, 350)
Do Until myValue1 = 1 Or myValue1 = 2 Or myValue1 = 3 Or myValue1 = 4 Or myValue1 = 5 Or myValue1 = 6
myValue1 = InputBox(message1a, title1, defaultValue1, 600, 350)
Loop
TextBox5.Text = myValue1]
 
Dat kan makkelijker met een Select Case

Code:
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim InputGetal As String = 0

        While Asc(InputGetal) <= 49 Or Asc(InputGetal) >= 54

            InputGetal = InputBox("Voer een cijfer in tussen 1 en 6", "Input", , 600, 350)

            Select Case Asc(InputGetal)
                Case 49 To 54 '(nummers 1 t/m 6 in Ascii)
                    MsgBox("U typte een " & InputGetal)
                Case Else
                    MsgBox("U kunt alleen een getal tussen de 1 en 6 invoeren")
            End Select

        End While

    End Sub

End Class
 
Vorig bericht

Bedankt voor de snelle reactie. Het werkt prima, met 1 klein probleempje. Als de gebruiker niets invult of annuleerd krijg ik de volgende melding:

De lengte van argument String moet groter zijn dan nul.
 
double as integer

Hallo,

Ben het programma aan het testen en nu blijkt dat als ik bijv een 33 intype hij dit ook accepteerd wat die ik fout?
 
Inputbox

Is er ook een mogelijkheid om de invoer in een INputbox te beperken tot een vooraf ingestelde aantal. Dus bijvoorbeeld maar 1 cijfer kunt ingeven in een Inputbox?
 
De eerste 2 vragen zou je kunnen omzeilen door het volgende :

1) Zet een try-catch om de select case , als ie dan niets is (cancelled) dan zal ie bij de errortrap het InputGetal op 0 zetten. zodat ie weer in de while loop komt.

2) hij pakt bijvoorbeeld ook 33 omdat ie alleen maar kijkt naar het eerst getal. (dus eigenlijk ziet hij dat als '3'. niet als 33, op te lossen door alleen het eerste getal in de messagebox te laten zien. (substring(1,1))

Code:
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim InputGetal As String = 0

        While Asc(InputGetal) <= 49 Or Asc(InputGetal) >= 54

            InputGetal = InputBox("Voer een cijfer in tussen 1 en 6", "Input", , 600, 350)

            [COLOR="Lime"]Try[/COLOR]
                Select Case Asc(InputGetal)
                    Case 49 To 54 '(nummers 1 t/m 6 in Ascii)
                        MsgBox("U typte een " & [COLOR="Red"]InputGetal.Substring(1, 1)[/COLOR])
                    Case Else
                        MsgBox("U kunt alleen een getal tussen de 1 en 6 invoeren")
                End Select
[COLOR="lime"]            Catch
                InputGetal = 0
            End Try[/COLOR]
        End While

    End Sub

End Class

de laatste vraag is niet mogelijk tenzij je een eigen inputbox class maakt.
Kan je wel een voorzetje geven als je dat zou willen.
 
Inputbox

Hallo,

Op zich werkt het nu prima, doch met onderstaande code geraak ik niet uit de lus. Voer ik een geldig getal in dan herhaald hij dit steeds.

{ Dim InputGetal As String = 0

While Asc(InputGetal) <= 48 Or Asc(InputGetal) >= 55

InputGetal = InputBox("Voer een cijfer in tussen 1 en 6", "Input", , 600, 350)
TextBox5.Text = InputGetal
Try
Select Case Asc(InputGetal)
Case 48 To 55 '(nummers 1 t/m 6 in Ascii)
MsgBox("U typte een " & InputGetal.Substring(1, 1))
Case Else
MsgBox("U kunt alleen een getal tussen de 1 en 6 invoeren")
End Select
Catch
InputGetal = 0
End Try
End While}
 
ff voor je bezig geweest.

Code:
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim Input As New InputBox
        Dim a As String = Input.Box("Hallo", "Mijn Titel", 1, 400, 500, 500, 50)

    End Sub

End Class


Public Class InputBox

    Dim InputForm As New Form
    Dim LabelPrompt As New Label
    Dim OkButton As New Button
    Dim CancelButton As New Button
    Dim Input As New TextBox
    Private m_InputResponse As String = String.Empty

    Public Property Response() As String
        Get
            Return m_InputResponse
        End Get
        Set(ByVal value As String)
            m_InputResponse = value
        End Set
    End Property

    Public Function Box(ByVal Prompt As String, _
                        Optional ByVal Title As String = "", _
                        Optional ByVal DefaultResponse As String = "", _
                        Optional ByVal XPos As Integer = -1, _
                        Optional ByVal YPos As Integer = -1, _
                        Optional ByVal Width As Integer = -1, _
                        Optional ByVal Height As Integer = -1 _
                        ) As String

        InputForm.TopMost = True
        'Zet InputForm als bovenste Form.
        InputForm.Location = New Point(IIf(XPos = -1, 10, XPos), IIf(YPos = -1, 30, YPos))
        'Zet standaard positie, anders XPos en/of YPos
        InputForm.Size = New Size(IIf(Width = -1, 300, Width), IIf(Height = -1, 150, IIf(Height < 100, 150, Height)))
        'Zet standaard groote, anders Width en/of Height , als Height kleiner is als 100 zet naar 150
        If Title <> "" Then InputForm.Text = Title
        'Zet optionele titel, anders niets

        OkButton.Size = New Size(75, 23)
        OkButton.Location = New Point((InputForm.Width - OkButton.Width) - 30, 10)
        OkButton.Text = "Ok"
        InputForm.Controls.Add(OkButton)
        AddHandler OkButton.Click, AddressOf ButtonClick

        CancelButton.Size = New Size(75, 23)
        CancelButton.Location = New Point((InputForm.Width - OkButton.Width) - 30, 43)
        CancelButton.Text = "Annuleren"
        InputForm.Controls.Add(CancelButton)
        AddHandler CancelButton.Click, AddressOf ButtonClick
        'Maak Buttons,positioneer en zet parameters

        LabelPrompt.AutoSize = True
        LabelPrompt.Location = New Point(10, 10)
        LabelPrompt.Text = Prompt
        InputForm.Controls.Add(LabelPrompt)
        'Maak Label,positioneer en zet parameters

        Input.Size = New Size(InputForm.Width - 40, 20)
        Input.Location = New Point(10, InputForm.Height - 70)
        InputForm.Controls.Add(Input)
        AddHandler Input.KeyPress, AddressOf TextBoxInput
        'Maak Textbox,positioneer en zet parameters

        InputForm.ShowDialog()
        'Laat InputForm zien

        If Response = String.Empty Then
            Response = DefaultResponse
        End If


        Return Response
    End Function

    Public Sub TextBoxInput(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)

        If Input.Text.Length = 0 Xor Asc(e.KeyChar) = 8 Then

            Select Case Asc(e.KeyChar)
                Case 49 To 54 '(nummers 1 t/m 6 in Ascii)
                Case 8 '(Backspace in Ascii) 
                    Input.Text.Remove(Input.Text.Length - 1, 1)
                Case Else
                    MsgBox("U kunt alleen een getal tussen de 1 en 6 invoeren")
                    e.KeyChar = Nothing
            End Select
        Else
            MsgBox("U kunt niet meer als 1 character invoeren")
            e.KeyChar = Nothing
        End If

    End Sub

    Public Sub ButtonClick(ByVal sender As Object, ByVal e As System.EventArgs)
        If sender.Text = "Ok" Then
            Response = Input.Text
            InputForm.Close()
        Else
            InputForm.Close()
        End If

    End Sub

End Class

deze heeft max 1 character input en de select case toetsen 1 t/m 6 + backspace.
 
double

Heel erg bedankt voor de code. Werkt prima. Alleen heb ik nog een vraag hieromtrent.

Na deze code opend er een formulier. Op deze formulier staat"

een button, genaamd: poging1

tektsvak1
tektsvak2
enz.

Vervolgens moet op de knop worden geklikt. Er moet zich dan een inputbox openen zoals door jou gemaakt. De daarin gevoede cijfer tussen 1-6 moet dan in tekstvak.1, vervolgens weer de inputbox enz.

Welke code moet nou onder die knop om inputbox te geven

Voorts rest mij heel hartelijk dank tot zover
 
Code:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Input As New InputBox
        TextBox1.Text = Input.Box("Hallo", "Mijn Titel", 1, 400, 500, 500, 50)
    End Sub
 
double

Hallo

Ik heb nu onderstaande

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

Dim Input As New InputBox : Dim textbox1
TextBox1.Text = Input.Box("Hallo", "Mijn Titel", 1, 400, 500, 500, 50)
End Sub


Als ik handles button1-click gebruik komt er een boogje onder de k te staan. met de mededeling ": "expected


Onder textbox1.text komt een blauwe streep. Door de tekst DIM TEXTBOX1 komt er een groene streep onder

Als ik onder dezelfde knop ook de volgende inputbox wil voor textbox2
moet ik dan hetzelfde herhalen.

dus Dim Input As New InputBox : Dim textbox2
TextBox2.Text = Input.Box("Hallo", "Mijn Titel", 1, 400, 500, 500, 50)
 
Double

Ik heb er dus Handles Button1.Click staan zoals door jou omschreven.
Ik krijg hierop de foutmelding:
Handles clause requires a With Event variable defined in the containing type ore on e of its base types.
 
dit zijn gewoon fouten in je form omdat button1 niet bestaat ofzo, of misschien al in gebruik is. en de groene lijn onder dim textbox1 is omdat je m wel declareert maar niet gebruikt.

Als jij duidelijk bent naar ons toe in plaats van een warrig verhaal op te hangen, en precies zegt wat je wilt, dan kunnen wij je beter helpen.
 
Nou waarschijnlijk vraag ik te veel. Begrijp niet dat ik nu ineens een warrige vraag stel.

Ik heb namelijk een duidelijke blauwe straap onder Handles button.click.
Met de foutmelding dat dit een with Events is met een variable enfin met wat ik je al eeerder schreef. Dit ligt niet aan mijn programma en button1 is zeker nie tin gebruik
 
Hij geeft die foutmelding omdat die button niet bestaat.

je geeft aan dat ie 'poging1' heet .. dan moet er wel Poging1.Click in de handle staan he??


Code:
    Private Sub Poging1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Poging1.Click

    End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan