• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Weasel

[VB.NET 2005] Duplicar controlos na nossa form

12 mensagens neste tópico

Por exemplo, temos uma tabela numa base de dados com 10 entradas cada entrada é o Nome Idade telefone por exemplo, mas esse nº de entradas pode variar ou seja não podemos ter 10 textboxes para os nomes mas um numero variavér....

É possivel criar só uma e depois consoante o nº de entradas na tabela replicar os controlos? neste caso as textboxes ?

Obrigado!  :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem nunca usei uma datagrid... :-[  nem sei como usar aquilo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pessoalmente prefiro introduzir dados a mao em textboxes de que directamente numa datagrid.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pessoalmente prefiro introduzir dados a mao em textboxes de que directamente numa datagrid.

E para duplicares os textboxes caso necessites, como fazes ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não podes duplicar contrololos. Mas adcionar novos facillmente.

Dim con As New TextBox
con.Size = CType(New Point(20, 70), Drawing.Size)
con.Location = New Point(10, 10)
con.Name="Con1"
Me.Controls.Add(con)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim é uma ideia :P eu quando dizia duplicar era apenas uma expressão :P queria era mais controles :D

Obrigado Asgorath

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fiquei de novo enrascado  :-[

Por exemplo:

Dim conx As New TextBox
        For i As Integer = 1 To 10
            conx.Size = TextBox1.Size
            conx.Location = New Point(TextBox1.Location.X, TextBox1.Location.Y + (i * 5))
            conx.Name = "Con" & i
            Me.Controls.Add(conx)
        Next

Este code apesar de ir de 1 a 10 só cria uma textbox, outra coisa não é possivel misturar o nome de uma textbox com um indice por exemplo Textbox para fazer algo do tipo:

        For i As Integer = 1 To 10
            Dim conx & i As New TextBox
            conx.Size = TextBox1.Size
            conx.Location = New Point(TextBox1.Location.X, TextBox[i].Location.Y + 20)
            conx.Name = "TextBox" & i
            Me.Controls.Add(conx & i)
        Next

Devo estar a inventar valente, mas acho que deu para perceberem...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que descobri qualquer coisa, assim que confirmar eu aviso, aqui fica o code para se poder usar um "substituto" dos Control Arrays

Public Class Form1
    Inherits System.Windows.Forms.Form
    Dim cbCount As Integer


    Private Sub cbDesignTime_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbDesignTime.Click
        'get a reference to the sender onjects name
        Dim cName As String = CType(sender, System.Windows.Forms.Button).Name
        'check to see which control was clicked by name
        If cName = "cbDesignTime" Then
            MsgBox("You clicked the Button placed here in design time")
        Else
            Dim x As Integer
            For x = 0 To cbCount
                If cName = "RunTime" & x Then
                    MsgBox("You clicked RunTime" & x & " button")
                End If
            Next
        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim x As Integer
        'create controls for the amount in the textbox
        Try
            For x = 0 To CType(tbButtonAmount.Text, Integer) - 1
                Dim cb As New System.Windows.Forms.Button()
                cb.Size = New System.Drawing.Size(200, 30)
                cb.Location = New System.Drawing.Point(250, 40 + x * 40)
                cb.Name = "RunTime" & CStr(cbCount)
                cb.Text = "RunTime" & CStr(cbCount)
                Me.Controls.Add(cb)
                cbCount += 1
                'add the click event and point to existing click event
                AddHandler cb.Click, AddressOf cbDesignTime_Click
            Next
        Catch
            MsgBox("Please ensure you have entered a number of controls to create in the texbox!")
            tbButtonAmount.Select()
        End Try
    End Sub
End Class

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Este ultimo código que coloquei funciona, ele cria os novos controlos, mas como posso depois "chamar" um controlo dentro de um While por exemplo ?

Tentei assim mas não funciona:

While dr.Read()
            Dim cb As New System.Windows.Forms.TextBox()
            Dim temp As New System.Windows.Forms.TextBox()
           
             temp.name = "Text" & CStr(x - 1)
            
            cb.Size = Textb.Size

            If (x = 0) Then
                cb.Location = New Point(TextBox1.Location.X, TextBox1.Location.Y + 20)
            Else
                cb.Location = New Point(Textb.Location.X, temp.Location.Y + 20)
            End If
            cb.Name = "Text" & CStr(x)

            cb.Text = dr.Item("cliente")

            Me.Controls.Add(cb)
            x += 1

        End While

Não sei como fazer para chamar o Text(x) ... Alguém ?  :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ninguém tem ideias para isto né ? Nunca precisaram de fazer um while para preencher uma série de textboxes por exemplo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:P

Já tenho a solução para o meu problema.

Para criar:

While dr.Read()
            Dim cb As New System.Windows.Forms.TextBox()
            cb.Size = Textb.Size
            cb.Location = New Point(Textb.Location.X, Textb.Location.Y + jump)
            cb.Name = "Text" & CStr(x)
            cb.Text = dr.Item("date") & " " & x
            cb.Visible = True
            Me.Controls.Add(cb)
            ListBox1.Items.Add(dr.Item("date"))
            jump += 25
            x += 1
        End While

Depois para alterar o conteúdo (por exemplo actualizar) uso este sistema: http://www.codeproject.com/vb/net/control_arrays_in_vbnet.asp funciona 5 estrelas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora