none
[Ajuda] Criação de novo TextBox em um Form ao clicar no botão RRS feed

  • Pergunta

  • Pessoal,

     

    Estou iniciando na programação com VB e utilizo a ferramenta Visual Studio 2010. Estou criando uma aplicação que possui um formulário de cadastro. Nesse formulário existem os seguintes componentes:

     

    Textbox - Nome Cliente

    TextBox - Endereço

    TextBox - Telefone

    Botão Salvar

    Botão Incluir

    Botão Remover

     

    Situação do problema: Gostaria que quando fosse apertado o botão Incluir, um novo TextBox - Telefone fosse mostrado em baixo desse já existe e ao clicar no botão remover, remover o TextBox - Telefone criado e assim por diante. Como se eu quisesse que o cliente informasse um segundo, terceiro, quarto ... telefone. Para isso o form precisaria ir aumentando ou diminuindo de tamanho automaticamente.

     

    Existe possibilidade disso ser feito?

    Muito obrigado!!

    terça-feira, 17 de janeiro de 2012 12:00

Respostas

  • Só adaptar ao seu código

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Teste
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            static int i;
            static int j;
     
            int X = 10;
            int Y = 20;
            int Z = 120;
    
    
                TextBox Txt1 = new TextBox();  
                TextBox Txt2 = new TextBox();
    
            private void Form1_Load(object sender, EventArgs e)
            {
     
            }
    
    
    
            private void button1_Click(object sender, EventArgs e)
            {
    
                Controls.Add (Txt1);
                Txt1.Location = new Point(X, Y + (i * 24));
                i++;
    
                Controls.Add (Txt2);
                Txt2.Location = new Point(Z, Y + (j * 24));
                j++;
            }
    
    
            private void button2_Click(object sender, EventArgs e)
            {
               Controls.Remove(Txt1);
                Txt1.Location = new Point(-Z, -Y + (j * 24));
                --i;
    
                Controls.Remove(Txt2);
                Txt2.Location = new Point(-Z, -Y + (j * 24));
                --j; 
            }
        }
    }
    
    Fonte da solução :  http://www.portugal-a-programar.org/forum/index.php?topic=21999.0 


    Tutoriais e Dicas VB.NET, C#, SQL e WPF
    @PauloHDeSousa
    • Sugerido como Resposta Bequi terça-feira, 17 de janeiro de 2012 19:26
    • Marcado como Resposta Harley AraujoModerator quinta-feira, 19 de janeiro de 2012 12:18
    terça-feira, 17 de janeiro de 2012 14:26

Todas as Respostas

  • Bom dia e bem vindo (:

    Você pode usar a prorpiedade

    VISIBLE dos seus texbox (Eles vão estar no formulário, só que não serão vistos)

    Depois de criar eles, Deixe o formulário com o tamanho normal ( SEM MOSTRAR ELES )

    Deixe elas Já como FALSE ( VISIBLE = FALSE )

    Quando o usuário clicar no Botão de Incluir adicione o código

     

    telefoneTextBox.Visible = TRUE
    

     

    E Para CRESCER o TAMANHO DO FORMULÁRIO FAÇA

     

     Me.Width = Me.Width +  50
     Me.Height = Me.Height + 50
    No botão de Remover Coloque

     

     

    telefoneTextBox.Visible = FALSE
    Me.Width = Me.Width -  50
    Me.Height = Me.Height - 50
    

    Observe que eu ALMENTEI e DIMINUI o tamanho em 50, mas você pode colocar o tamanho que achar melhor.

     

    Essa é uma solução boa para você que está começando, mas existem modos melhores, veja aqui.

    http://social.msdn.microsoft.com/forums/pt-BR/vsvbasicpt/thread/7d1d21cb-e2d0-4736-b13d-2b09fb6a22ca

    Lembrando que se você usa banco de dados, você tem que ter os campos

    TELEFONE1,TELEFONE2,TELEFONE3

    para guardar os números 1, 2 e 3 de TELEFONE.

     


    Tutoriais e Dicas VB.NET, C#, SQL e WPF
    @PauloHDeSousa
    terça-feira, 17 de janeiro de 2012 12:19
  • Olá Paulo!

     

    Muito obrigado pela rapidez na resposta! Esse metódo de deixar invisível eu já conhecia, porém meu cliente pode querer cadastrar infinitos telefones. Então não seria a forma mais viável de fazer isso.

     

    Lendo um pouco na internet, achei a seguinte forma e adaptei o código a minha maneira num form de exemplo:

     

     

    Public Class Form1
        Dim x = 0
        Private Sub BtCriar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtCriar.Click
            Dim txtBox As New TextBox()
    
            With txtBox
                txtBox.Location = New System.Drawing.Point(50, x)
                .Size() = New System.Drawing.Size(70, x + 10)
                x = x + 30
    
            End With
    
            With Me.Controls
                .Add(txtBox)
            End With
        End Sub
    
        Private Sub BtRemover_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtRemover.Click
        'Função X da Questão
    End Sub End Class

    Ao clicar no botão BtCriar, a função acima irá criar vários textbox no meu form, um em baixo do outro. Agora gostaria que quando fosse clicado no botão BtRemover, os Textbox criados fossem removidos a medida em que foram criados.

     


    • Editado Fadul terça-feira, 17 de janeiro de 2012 13:47
    terça-feira, 17 de janeiro de 2012 13:46
  • Só adaptar ao seu código

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Teste
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            static int i;
            static int j;
     
            int X = 10;
            int Y = 20;
            int Z = 120;
    
    
                TextBox Txt1 = new TextBox();  
                TextBox Txt2 = new TextBox();
    
            private void Form1_Load(object sender, EventArgs e)
            {
     
            }
    
    
    
            private void button1_Click(object sender, EventArgs e)
            {
    
                Controls.Add (Txt1);
                Txt1.Location = new Point(X, Y + (i * 24));
                i++;
    
                Controls.Add (Txt2);
                Txt2.Location = new Point(Z, Y + (j * 24));
                j++;
            }
    
    
            private void button2_Click(object sender, EventArgs e)
            {
               Controls.Remove(Txt1);
                Txt1.Location = new Point(-Z, -Y + (j * 24));
                --i;
    
                Controls.Remove(Txt2);
                Txt2.Location = new Point(-Z, -Y + (j * 24));
                --j; 
            }
        }
    }
    
    Fonte da solução :  http://www.portugal-a-programar.org/forum/index.php?topic=21999.0 


    Tutoriais e Dicas VB.NET, C#, SQL e WPF
    @PauloHDeSousa
    • Sugerido como Resposta Bequi terça-feira, 17 de janeiro de 2012 19:26
    • Marcado como Resposta Harley AraujoModerator quinta-feira, 19 de janeiro de 2012 12:18
    terça-feira, 17 de janeiro de 2012 14:26
  • Olá Paulo,

    Pode me tirar uma dúvida?

    Nesse código porque qual o objetivo das variáveis:

    static int i; static int j; int Z = 120;

    e porque o * 24?

    quarta-feira, 25 de outubro de 2017 12:47