none
Pegar valor de componente de outro form RRS feed

  • Pergunta

  • Olá galera.

    Estou com problemas para pegar os valores de componentes de outro form.

    Eu gostaria, por exemplo: No form1 tenho um textbox txt1. No txt1 o usuario digita seu nome, por exemplo, e ao clicar em um botão, o form2 pegue esse valor e trabalhe com ele.

    Estou usando windowsform e tentei o seguinte:

            private Inclui_Operador crcsOperador;

    private void btnSalvar_Click(object sender, EventArgs e)
            {

                crcsOperador = new Inclui_Operador();

                Salvar(crcsOperador.NomeText);      //o valor aqui vem vazio.

    }

    public void Salvar(TextBox Operador)

    {

    ..

    }

    O que posso fazer?

     

    segunda-feira, 27 de setembro de 2010 14:50

Respostas

  • Bom dia Guilherme,

     

    Já tem uma longa discussão sobre isso aqui no Forum, em especial nessa thread que vou lhe passar abaixo:

     

    http://social.msdn.microsoft.com/forums/pt-br/vscsharppt/thread/A9023EC4-7875-4A40-BF3A-65FB75B7C9B5


    Elielson de Andrade elielson( a )gd.com.br www.despcompany.com www.emyface.com
    segunda-feira, 27 de setembro de 2010 15:33
  • Guilherme,

    Além do link com a ótima thread que o Elielson te passou, sugiro também que você dê uma olhada neste artigo do CodeProject:

    http://www.codeproject.com/KB/cs/pass_data_between_forms.aspx

    Nesse link o autor explica umas 4 formas de passar dados entre forms...


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    segunda-feira, 27 de setembro de 2010 16:41
    Moderador
  • Olá meu caro de uma olhada de como trocar informações entre
    componentes de forms qlqr duvida posta ai

    http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/cb1f26b1-ac76-4edd-861f-07b9a297c33b/#9c6549e3-6d89-485e-bb8e-9e156ba9fb30

    Att Edney

    Se for útil por favor marque ;D

     

    segunda-feira, 27 de setembro de 2010 17:01
  • Guilherme,

    Mas então você já tem um form Inclui_Operador quando você clica no botão de Salvar? Se sim, você abriu esse form anteriormente, certo? Como está o código dessa parte que abre o form Inclui_Operador anteriormente?

    Nesse momento que você está abrindo o form (fora do código do botão salvar), você poderia guardar a instância do form Inclui_Operador que você está abrindo... Seria algo mais ou menos assim:

        private Inclui_Operador fInclui_Operador;
        private void AbreFormIncluiOperador()
        {
          fInclui_Operador = new Inclui_Operador();
          fInclui_Operador.Show();
        }
    
        private void btSalvar_Click()
        {
          Salvar(fInclui_Operador.txtUsuario.Text);
        }
    
    

    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quinta-feira, 30 de setembro de 2010 15:52
    Moderador
  • Cara não sei em q pé está mas se for oq eu entendi para acabar com a discução faça o seguinte:

    vc tem dois forms correto pega o q tem o textbox e cria esse método dentro dele

    public string ValorDoTextBox()

    {

              return teuTextBox.Tex;

    }

    no teu form principal ond vc vai abrir esse form faz o seguinte cria a seguinte propriedade nele

    private OteuFormQueTemOtextBox frmTXT;

    vai no botão q abre ele e põem esse código

    private void botãoQueAbreOformDoTexBox_Click(object sender, EventArgs e)

    {

              frmTXT = new OteuFormQueTemOtextBox();

              frmTXT.Show();

    }

    e no teu botão salvar confira se ele ta puxando o valor q vc qr

    private void botãoQueSalva_Click(object sender, EventArgs e)

    {

              MessageBox.Show(frmTXT.ValorDoTextBox());

    }

    OK??? isso fara com q vc consiga pegar o valor do teu textbox a vontade mais cuidado vc tem

    q fazer um ótimo tratamento de erros nesse caso se não da ____

    Att Edney;

    Se for útil por favor não esqueça de marcar, facilitando com isso

    a vida das pessoas com esta msma dúvida

    quinta-feira, 30 de setembro de 2010 16:11
  • Olá galera, obrigado por toda a ajuda, acho que por algum erro de estruturação não consegui fazer funcionar nenhum dos metodos me passados. Estudando mais afundo sobre herança, consegui fazer funcionar desse jeito, caso seja um jeito errado ou eu tenha problemas peço que por gentileza me ajudem.
    public partial class Form_Base : Form
      {
        public Form_Base()
        {
          InitializeComponent();
        }
    
        public virtual void btnSalvar_Click(object sender, EventArgs e)
        {
        }
      }
    
    public partial class Inclui_Operador : Form_Base
      {
        Inclui_Operador()
        {
          InitializeComponent();
        }
    
        public override void btnNovo_Click(object sender, EventArgs e)
        {
          base.btnNovo_Click(sender, e);
          MessageBox.Show("OK");
        }
      }
    
    segunda-feira, 25 de outubro de 2010 10:29

Todas as Respostas

  • Bom dia Guilherme,

     

    Já tem uma longa discussão sobre isso aqui no Forum, em especial nessa thread que vou lhe passar abaixo:

     

    http://social.msdn.microsoft.com/forums/pt-br/vscsharppt/thread/A9023EC4-7875-4A40-BF3A-65FB75B7C9B5


    Elielson de Andrade elielson( a )gd.com.br www.despcompany.com www.emyface.com
    segunda-feira, 27 de setembro de 2010 15:33
  • Guilherme,

    Além do link com a ótima thread que o Elielson te passou, sugiro também que você dê uma olhada neste artigo do CodeProject:

    http://www.codeproject.com/KB/cs/pass_data_between_forms.aspx

    Nesse link o autor explica umas 4 formas de passar dados entre forms...


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    segunda-feira, 27 de setembro de 2010 16:41
    Moderador
  • Olá meu caro de uma olhada de como trocar informações entre
    componentes de forms qlqr duvida posta ai

    http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/cb1f26b1-ac76-4edd-861f-07b9a297c33b/#9c6549e3-6d89-485e-bb8e-9e156ba9fb30

    Att Edney

    Se for útil por favor marque ;D

     

    segunda-feira, 27 de setembro de 2010 17:01
  • Guilherme,

     

    Tente assim:

    No form2 declare uma variavel, por exemplo

    string txt =null;

    No form1 quando for chamar o form2 faça assim:

    form2 form = new form2();

    form.txt = this.txt1.text;

    form.show();

     

    Isso é uma maneira rapida, porém seria de grande utilidade se vc ler os artigos e topicos passados pelo nossos amigos.

     

    att,

     

    Rafael Tomitão

    terça-feira, 28 de setembro de 2010 02:24
  • Ola galera, muito obrigado pela ajuda. Infelizmente ainda não obtive sucesso. Tentei praticamente todas as sugestões que você me passaram. Deixe-me tentar explicar melhor. Eu tenho um form base que contem um toolstrip e eu gostaria de usar esse form base em varias outras telas para poder utilizar o tollstrip. Por exemplo no form operador eu herdei o for base:

    public partial class Inclui_Operador : Form_Base

    E agora eu gostaria de qaundo eu clicasse no botão de salvar que fica no tollstrip (form base) eu conseguisse pegar os valores digitados nos textbox. Do jeito que eu havia tentado e vcs me sugeriram eu consigo encontrar os textbox, mas debugando o programa percebo que o form basse reconhece eles como nulo, enquanto ele possuem valor digitado.

    O que posso faze? Muito obrigado pela ajuda.

    terça-feira, 28 de setembro de 2010 13:13
  • Guilherme,

    Entendi o cenário... Como você está fazendo no click do seu botão do form base?


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    terça-feira, 28 de setembro de 2010 16:19
    Moderador
  • Obrigado pela ajuda.

     

            private void btnSalvar_Click(object sender, EventArgs e)

            {
               crcsOperador = new Inclui_Operador();
                Salvar(crcsOperador.txtUsuario.text);
            }

     

    debugando o Salvar(crcsOperador.txtUsuario.text); vem em branco: ""

    quarta-feira, 29 de setembro de 2010 12:00
  • Guilherme,

    Mas, você está criando um objeto do tipo Inclui_Operador e logo em seguida pegando o valor de txtUsuario.Text... A não ser que você esteja fazendo alguma alteração ou tratamento no construtor de Inclui_Operador, faz sentido que ele esteja vindo em branco... Você faz alguma coisa no construtor de Inclui_Operador?


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quarta-feira, 29 de setembro de 2010 12:20
    Moderador
  • Não, não estou fazendo nada. É que foi o unico meio que consigui para instanciar meu form Inclui_Operador.
    quarta-feira, 29 de setembro de 2010 12:52
  • Guilherme,

    Não entendi mais nada... Você está instanciando um form Inclui_Operador e logo na próxima linha pega o valor de um textbox dele... Se você não faz nada no construtor, é natural que o texto desse textbox esteja vazio... Qual o valor que você esperava que ele retornasse?

    Não tenho certeza, mas, pode ser que você esteja se perdendo na arquitetura da sua aplicação...


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quarta-feira, 29 de setembro de 2010 23:25
    Moderador
  • O problema é que no meu caso os dois forms estão abertos já. O form_base só contem o menu com botões. E o que eu queria era digitar em textbox no form inclui_operador e quando eu clicasse em salvar no menu (form_base) o evento click do form base fosse capaz de pegar o que foi digitado no textbox do form inclui_operador, para então realizar os comando de inclusão/alteração no banco. Se você souber de alguma solução.

     

    Obrigado pela atenção!

    quinta-feira, 30 de setembro de 2010 13:41
  • Guilherme,

    Mas então você já tem um form Inclui_Operador quando você clica no botão de Salvar? Se sim, você abriu esse form anteriormente, certo? Como está o código dessa parte que abre o form Inclui_Operador anteriormente?

    Nesse momento que você está abrindo o form (fora do código do botão salvar), você poderia guardar a instância do form Inclui_Operador que você está abrindo... Seria algo mais ou menos assim:

        private Inclui_Operador fInclui_Operador;
        private void AbreFormIncluiOperador()
        {
          fInclui_Operador = new Inclui_Operador();
          fInclui_Operador.Show();
        }
    
        private void btSalvar_Click()
        {
          Salvar(fInclui_Operador.txtUsuario.Text);
        }
    
    

    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quinta-feira, 30 de setembro de 2010 15:52
    Moderador
  • Cara não sei em q pé está mas se for oq eu entendi para acabar com a discução faça o seguinte:

    vc tem dois forms correto pega o q tem o textbox e cria esse método dentro dele

    public string ValorDoTextBox()

    {

              return teuTextBox.Tex;

    }

    no teu form principal ond vc vai abrir esse form faz o seguinte cria a seguinte propriedade nele

    private OteuFormQueTemOtextBox frmTXT;

    vai no botão q abre ele e põem esse código

    private void botãoQueAbreOformDoTexBox_Click(object sender, EventArgs e)

    {

              frmTXT = new OteuFormQueTemOtextBox();

              frmTXT.Show();

    }

    e no teu botão salvar confira se ele ta puxando o valor q vc qr

    private void botãoQueSalva_Click(object sender, EventArgs e)

    {

              MessageBox.Show(frmTXT.ValorDoTextBox());

    }

    OK??? isso fara com q vc consiga pegar o valor do teu textbox a vontade mais cuidado vc tem

    q fazer um ótimo tratamento de erros nesse caso se não da ____

    Att Edney;

    Se for útil por favor não esqueça de marcar, facilitando com isso

    a vida das pessoas com esta msma dúvida

    quinta-feira, 30 de setembro de 2010 16:11
  • Olá galera, obrigado por toda a ajuda, acho que por algum erro de estruturação não consegui fazer funcionar nenhum dos metodos me passados. Estudando mais afundo sobre herança, consegui fazer funcionar desse jeito, caso seja um jeito errado ou eu tenha problemas peço que por gentileza me ajudem.
    public partial class Form_Base : Form
      {
        public Form_Base()
        {
          InitializeComponent();
        }
    
        public virtual void btnSalvar_Click(object sender, EventArgs e)
        {
        }
      }
    
    public partial class Inclui_Operador : Form_Base
      {
        Inclui_Operador()
        {
          InitializeComponent();
        }
    
        public override void btnNovo_Click(object sender, EventArgs e)
        {
          base.btnNovo_Click(sender, e);
          MessageBox.Show("OK");
        }
      }
    
    segunda-feira, 25 de outubro de 2010 10:29