Jaemine Sanchez
Jaemine Sanchez

Reputation: 75

adding multiple textbox .net

What i want is when i input a number in texbox1.text like for example i enter 3 it should show 3 textbox but i always get an error. and also i have to save it in database but i dont know how. Help Please..

Private boxes(TextBox1.text) As TextBox


Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim newbox As TextBox
    For i As Integer = 1 To TextBox1.Text
        newbox = New TextBox
        newbox.Size = New Drawing.Size(575, 35)
        newbox.Location = New Point(10, 10 + 35 * (i - 1))
        newbox.Name = "TextBox" & i
        newbox.Text = newbox.Name
        'connect it to a handler, save a reference to the array and add it to the form controls
        AddHandler newbox.TextChanged, AddressOf TextBox_TextChanged
        boxes(i) = newbox
        Me.Controls.Add(newbox)
    Next

End Sub

Upvotes: 2

Views: 1590

Answers (1)

David Wilson
David Wilson

Reputation: 4439

OK. The error I get when I try to run your code is :-

An unhandled exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll

Additional information: Conversion from string "" to type 'Integer' is not valid.`

This is because you're trying to start a loop using a string as the termination index for the loop. Try using

For i As Integer = 1 To Val(TextBox1.Text)

your next problem will depend on how you've declared boxes. If you have declared it like this ..

Dim boxes() As TextBox

You'll end up with a Null reference exception because when you declared boxes, you didnt supply any elements. To remedy this you'll need to add this just before your loop ..

ReDim Preserve boxes(Val(TextBox1.Text))

If boxes is a list.. and to be honest .. thats a better choice than an array, instead of the above line you'll need to change

boxes(i) = newbox

to

boxes.Add(newbox)

You might also need to change other code associated with boxes, but the work will be worth it.

Your biggest problem is that you're trying to get a value from a TextBox that hasn't even appeared yet. You've put your code inside the form's load event. It really needs to be in a separate method. Oh and rather than use the TextBox.changed event you should use a button control to execute the method. Otherwise it's too easy for someone to change the number in the textbox. With your code, each time the textbox is changed (deleting a digit or adding another digit), more TextBoxes will be added and you could end up with lots of them.

So possible final code should look like ..

Public Class Form1

    Dim boxes As New List(Of TextBox)

    Private Sub Addbuttons(buttonCount As Integer)
        Dim newbox As TextBox
        For i As Integer = 1 To buttonCount
            newbox = New TextBox
            newbox.Size = New Drawing.Size(575, 35)
            newbox.Location = New Drawing.Point(10, 10 + 35 * (i - 1))
            newbox.Name = "TextBox" & i
            newbox.Text = newbox.Name
            'connect it to a handler, save a reference to the array and add it to the form controls
            boxes.Add(newbox)
            Me.Controls.Add(newbox)
        Next
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Addbuttons(Val(TextBox1.Text))
    End Sub
End Class

Upvotes: 3

Related Questions