none
Pegar valor de um form e usar em outro form RRS feed

  • Pergunta

  • boa tarde amigos, eu preciso pegar um valor(int) de um form para utilizar em outro form

    por ex: no form1 tenho a seguinte variável:

    int iTipo = 0;

    no form2 tenho a seguinte condição:

    if (frm.iTipo == 0)

    porem preciso declarar o form1 no form2 (form1 frm = new form1;) e com isso os valores das variáveis sao zerados.

    qual a melhor forma de realizar esse processo ?

    quinta-feira, 10 de maio de 2012 18:15

Respostas

  • Olá Daniel,

    Aqui vão algumas dicas breves de como trabalhar com formulários no windows forms:

    1 - Abertura de novos formulários

    No exemplo abaixo utilizo o Form1 e o Form2, observe que no código do Form2 possuo um atributo publico... do qual consigo manipular do Form1

    public partial class Form2 : Form
    {
      public string AtributoAcessadoPorOutroForm
      {
        get;
        set;
      }
    
      public Form2()
      {
        InitializeComponent();
      }
    }
    
    ---------------------------------------------------------------------------------------------------------------
    public partial class Form1 : Form
    {
      public Form1()
      {
        InitializeComponent();
    
        Form2 newForm = new Form2();
        newForm.AtributoAcessadoPorOutroForm = "TEXTO";
        newForm.Show();
      }
    }
    

    2 -Acessar a instância de um formulário que está aberto

    Para poder acessar o formulário que está aberto vc deve criar um atributo em sua classe e manter sua instância viva pelo tempo que for necessário.

    Veja que no código do Form1 criamos um atributo que irá conter a instância do formulário que foi aberto, e que em outros trechos de código conseguimos interagir com o formulário que está aberto.

    public partial class Form1 : Form
    {
      private Form2 newForm { get; set; }
    
      public Form1()
      {
        InitializeComponent();
    
        newForm = new Form2();
        newForm.AtributoAcessadoPorOutroForm = "TEXTO";
        newForm.Show();
      }
    
      public void OutroMetodo()
      {
        if (newForm == null)
          return;
    
        newForm.AtributoAcessadoPorOutroForm = "Estamos interagindo";
      }
    
      public void MaisUmOutroMetodo()
      {
        if (newForm == null)
          return;
    
        newForm.AtributoAcessadoPorOutroForm = "Estamos interagindo novamente";
      }
    }
    


    3 - Acessar o formulário chamador

    Também é muito comum e necessário que façamos com que um formulário aberto interaja com o formulário que o abriu. Neste caso utilizado a propriedade Owner.

    Sempre que for abrir um formulário, atribua um valor para este atributo, conforme o exemplo abaixo:

    public partial class Form1 : Form
    {
      private Form2 newForm { get; set; }
    
      public Form1()
      {
        InitializeComponent();
    
        newForm = new Form2();
        newForm.AtributoAcessadoPorOutroForm = "TEXTO";
        newForm.Owner = this;
        newForm.Show();
      }
    }
    

    -----------------------------------------------------------------------------

    E o formulário chamado, para acessar o Form que o abriu deve fazer assim:

    public partial class Form2 : Form
    {
      public string AtributoAcessadoPorOutroForm
      {
        get;
        set;
      }
    
      public Form2()
      {
        InitializeComponent();
    
        if (this.Owner != null)
        {
          if (this.Owner is Form1)
          {
            Form1 formularioPai = (Form1)this.Owner;
          }
        }
      }
    }
    

    Força e muito estudo.

    Qualquer dúvida volte a postar.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    sexta-feira, 11 de maio de 2012 21:31
  • Nessa thread respondi a mesma questão.

    Link para resposta

    Você pode acessar através de uma propriedade estática como os amigos sugeriram ai.


    Fábio Kiatkowski Engenheiro de Software

    sábado, 12 de maio de 2012 00:23

Todas as Respostas

  • static.
    quinta-feira, 10 de maio de 2012 18:39
  • como ficaria o código ?
    • Editado Daniel Dutra quinta-feira, 10 de maio de 2012 18:50
    quinta-feira, 10 de maio de 2012 18:48
  • Static int i;
    
    //chame assim
    if(frmTal.i == 0)
    

    Desta maneira nao precisa ficar criando instancia do form.

    Se a postagem for UTIL,pontue; Se a postagem solucionar o problema MARQUE COMO RESPOSTA.

    quinta-feira, 10 de maio de 2012 21:03
  • Uma variável estática é compartilhada com outras classes sem a necessidade de uma referência à uma instância da classe onde ela é declarada.

    No código do Eduardo,o 's' de 'static' é minúsculo.

    sexta-feira, 11 de maio de 2012 02:03
  • Olá Daniel,

    Aqui vão algumas dicas breves de como trabalhar com formulários no windows forms:

    1 - Abertura de novos formulários

    No exemplo abaixo utilizo o Form1 e o Form2, observe que no código do Form2 possuo um atributo publico... do qual consigo manipular do Form1

    public partial class Form2 : Form
    {
      public string AtributoAcessadoPorOutroForm
      {
        get;
        set;
      }
    
      public Form2()
      {
        InitializeComponent();
      }
    }
    
    ---------------------------------------------------------------------------------------------------------------
    public partial class Form1 : Form
    {
      public Form1()
      {
        InitializeComponent();
    
        Form2 newForm = new Form2();
        newForm.AtributoAcessadoPorOutroForm = "TEXTO";
        newForm.Show();
      }
    }
    

    2 -Acessar a instância de um formulário que está aberto

    Para poder acessar o formulário que está aberto vc deve criar um atributo em sua classe e manter sua instância viva pelo tempo que for necessário.

    Veja que no código do Form1 criamos um atributo que irá conter a instância do formulário que foi aberto, e que em outros trechos de código conseguimos interagir com o formulário que está aberto.

    public partial class Form1 : Form
    {
      private Form2 newForm { get; set; }
    
      public Form1()
      {
        InitializeComponent();
    
        newForm = new Form2();
        newForm.AtributoAcessadoPorOutroForm = "TEXTO";
        newForm.Show();
      }
    
      public void OutroMetodo()
      {
        if (newForm == null)
          return;
    
        newForm.AtributoAcessadoPorOutroForm = "Estamos interagindo";
      }
    
      public void MaisUmOutroMetodo()
      {
        if (newForm == null)
          return;
    
        newForm.AtributoAcessadoPorOutroForm = "Estamos interagindo novamente";
      }
    }
    


    3 - Acessar o formulário chamador

    Também é muito comum e necessário que façamos com que um formulário aberto interaja com o formulário que o abriu. Neste caso utilizado a propriedade Owner.

    Sempre que for abrir um formulário, atribua um valor para este atributo, conforme o exemplo abaixo:

    public partial class Form1 : Form
    {
      private Form2 newForm { get; set; }
    
      public Form1()
      {
        InitializeComponent();
    
        newForm = new Form2();
        newForm.AtributoAcessadoPorOutroForm = "TEXTO";
        newForm.Owner = this;
        newForm.Show();
      }
    }
    

    -----------------------------------------------------------------------------

    E o formulário chamado, para acessar o Form que o abriu deve fazer assim:

    public partial class Form2 : Form
    {
      public string AtributoAcessadoPorOutroForm
      {
        get;
        set;
      }
    
      public Form2()
      {
        InitializeComponent();
    
        if (this.Owner != null)
        {
          if (this.Owner is Form1)
          {
            Form1 formularioPai = (Form1)this.Owner;
          }
        }
      }
    }
    

    Força e muito estudo.

    Qualquer dúvida volte a postar.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    sexta-feira, 11 de maio de 2012 21:31
  • Nessa thread respondi a mesma questão.

    Link para resposta

    Você pode acessar através de uma propriedade estática como os amigos sugeriram ai.


    Fábio Kiatkowski Engenheiro de Software

    sábado, 12 de maio de 2012 00:23
  • obrigado galera, deu certo !
    terça-feira, 15 de maio de 2012 18:09