none
VB.Net - Item adicionado dinamicamente não aparece. RRS feed

  • Pergunta

  • Olá pessoal!

    Estou com o seguinte problema em minha aplicação Windows Forms:

    Tenho um campo TextBox que recebe um número. Esse número é a quantidade de vezes que um trecho do formulário deve ser repetido. No meu caso, se o usuário digitar 2, deve aparecer no formulário dois panels com um label, textbox e datagrid.

    Até onde fiz, consigo enxergar o label e  textbox sem nenhum problema. Apenas não consigo visualizar o data grid que criei.


    Segue abaixo o trecho de código que executa a tarefa:

     Private Sub cmdAdicionarPontos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAdicionarPontos.Click
            Dim cont As Integer = 0
            Dim y As Integer = 0
    
    
            For cont = 0 To Convert.ToInt32(txtQtdePontos.Text) Step 1
    
                Dim x As Integer = 0
                Dim lblPontos As New Label
                lblPontos.Text = "Pontos:"
                lblPontos.Location = New Point(0, x)
    
                x = x + 30
                Dim txtPontos As New TextBox
                txtPontos.Width = 300
                txtPontos.Location = New Point(0, x)
    
                x = x + 80
                Dim grdItens As New DataGridView
                grdItens.Width = 700
                grdItens.Height = 50
    
                Dim painel As New Panel
                painel.Controls.Add(lblPontos)
                painel.Controls.Add(txtPontos)
                painel.Controls.Add(grdItens)
    
    
                painel.Location = New Point(0, y)
                y = y + 200
    
                pnlPontos.Controls.Add(painel)
            Next
    
        End Sub

    terça-feira, 6 de agosto de 2013 17:59

Respostas

  • Não é necessário que ninguém ais me responda. Já compreendi qual o meu erro. Vou postar a solução que encontrei por conta própria.

    Ao criarem um painel dinamicamente e inserir dinamicamente controles nele, é importante que se defina qual o seu tamanho. Parece bobagem, mas este era o meu problema.

    Segue abaixo a solução encontrada:

    Dim cont As Integer = 0
            Dim y As Integer = 0
    
    
            For cont = 0 To Convert.ToInt32(txtQtdePontos.Text) Step 1
    
                Dim x As Integer = 0
                Dim lblPontos As New Label
                lblPontos.Text = "Pontos:"
                lblPontos.Location = New Point(0, x)
    
                x = x + 30
                Dim txtPontos As New TextBox
                txtPontos.Width = 300
                txtPontos.Location = New Point(0, x)
    
                x = x + 50
                Dim grdItens As New DataGridView
                grdItens.Width = 700
                grdItens.Height = 100
                grdItens.Location = New Point(0, x)
    
                Dim painel As New Panel
                painel.Size = New Size(700, 200)
                painel.Controls.Add(lblPontos)
                painel.Controls.Add(txtPontos)
                painel.Controls.Add(grdItens)
    
    
                painel.Location = New Point(0, y)
                y = y + 200
    
                pnlPontos.Controls.Add(painel)
            Next
    

    • Marcado como Resposta JulioMurta quinta-feira, 8 de agosto de 2013 16:01
    quinta-feira, 8 de agosto de 2013 16:01