» »

vb.net: dynamic textbox

vb.net: dynamic textbox

saule ::

Zdravo,

Na formi imam knof, ki ob pritisku doda textbox:

     Dim yPosition As Integer

        yPosition = 473 + (26 * intBtnClkCount)

        intBtnClkCount += 1

        Dim TextBox1 As New TextBox()
        Dim TextBox2 As New TextBox()
        Dim TextBox3 As New TextBox()
        Dim TextBox4 As New TextBox()
        Dim TextBox5 As New TextBox()
        Dim TextBox6 As New TextBox()

        With TextBox1
            .Name = "TextBox1" & intBtnClkCount
            .Location = New Point(12, yPosition)
            .Size = New Size(51, 22)
            Me.Controls.Add(TextBox1)
        End With


Tako kot za prvega jo koda spisana še za ostalih 6 textbox-ev. Vsak je posebej, ker so po horizontali vsak po svoje in se mi je nekako zdelo najlažje. Ta knof ob vsakem pritisku doda novo vrsto textbox-ev in beleži koliko jih je (intBtnClkCount). S to številko so textbox-i tudi označeni v kateri vrsti so + vsak ima unique ime (TextBox11 je prvi v prvi vrsti, Textbox12 je prvi v prvi v drugi vrsti and so on..) Ok, do tu vse vredu ni mi pa sedaj jasno kako naj preberem vsebino (in jo potem zapišem v bazo). Nekaj pacam takole:

        For x As Integer = 0 To intBtnClkCount

            Dim textbox As New TextBox

            With textbox
                .Name = "Textbox1" & intBtnClkCount
            End With

            SQLStr = "INSERT INTO [temp].[dbo].[temp] ([textbox1]) VALUES(" & textbox.Text & ")"  
            Dim command As New System.Data.SqlClient.SqlCommand(SQLStr, connection)

            connection.Open()
            command.ExecuteNonQuery()
            connection.Close()

Program mora prebrati vsako vrstico textbox-ev posebej (torej textbox11 do textbox61, sestavi SQL stavek, insert-a in potem na novo textbox12 do textbox62....) in jo zapisati v bazo.
Ne znam prebrat vsebine textboxev, ki jih programsko dodajam... :) Ima mogoče kdo idejo?

Ericssony ::

Uporabi foreach zanko ki gre skoz vse gradnike na formi in če je gradnik tipa textbox potem enostavno prebereš vrednost lastnosti text oz. vrednost zapišeš v bazo.

Dim myctl As Control
For Each myctl in Me.Controls
      If TypeOf myctl Is TextBox Then
           ' vrednosti dobiš zdaj z myctl.Text
      End If
Next

Zgodovina sprememb…

saule ::

Thx!

Jaz rabim na koncu dobit po 6 vrednosti - 6 textbox-ev tvori en SQL stavek, število SQL stavkov na koncu je pač poljubno, odvisno od tega koliko jih uporabnik "naštemplja".

Tako sem vzel tvoj način kako priti do vsebine textbox-ev, vse skupaj dal v en array, array podelil s 6 in na koncu dobil kar sem želel:

        Dim myctl As Control
        Dim l As New List(Of String)

        For Each myctl In Me.Controls

            If TypeOf myctl Is TextBox And Not myctl.Name = "searchbox" Then

                l.Add(myctl.Text)

            End If
        Next

        Dim nrOfRows As Integer
        Dim y As Integer

        y = 0
        nrOfRows = l.Count / 6

        For x As Integer = 1 To nrOfRows

            MessageBox.Show(l(y) & " + " & l(y + 1) & " + " & l(y + 2) & " + " & l(y + 3))

            y = y + 6

        Next


Meni zadostuje, me pa vseeno zanima če obstaja kakšna "bolj pravilna" pot?

saule ::

Zopet sem pri nečem podobnem - programatično sem dodal textbox sedaj pa nevem kako naj naslavljam evente za te textbox-e (on KeyDown)?

majlo ::

     
   
Public Class Form1

    Private TextBoxes() As MyTextBox

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

        Static num As Integer
        num += 1
        ReDim TextBoxes(num)
        TextBoxes(num - 1) = New MyTextBox()
        With TextBoxes(num - 1)
            .Name = "Textbox" & num
            '.Text = "Textbox" & num
            .Location = New System.Drawing.Point(10, num * (.Height + 10))
        End With

        Me.Controls.AddRange(New System.Windows.Forms.Control() {TextBoxes(num - 1)})
    End Sub

    Public Class MyTextBox
        Inherits System.Windows.Forms.TextBox
        Private Sub MyTextBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.TextChanged
            MsgBox(Me.Name & "   " & Me.Text)
        End Sub
    End Class

End Class
        Next


Malo bo moral spremenit kodo, ki jo že maš.

Aja isto lahko dodaš v class za key down itd..

Private Sub MyTextBox_KeyDown(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.KeyPress
'Pač kaj bi rad naredil
End Sub

Zgodovina sprememb…

  • spremenilo: majlo ()

saule ::

Thx majlo!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Visual Basic

Oddelek: Programiranje
313460 (2486) cekr
»

Odpiranje programa v Visual Studio

Oddelek: Programiranje
8918 (776) darkolord
»

c# undo, redo, paste

Oddelek: Programiranje
5955 (855) japol
»

Vb 2005 - TextBox - Izračun števila vrstic?

Oddelek: Izdelava spletišč
81613 (1488) smash
»

[ASP.NET] send mail

Oddelek: Programiranje
51275 (1212) Microsoft

Več podobnih tem