none
Valor de Form1 para Form2 RRS feed

  • Pergunta

  • Boa tarde, eu tenho dois Forms:

    FORM1:

     public void SubtrairSaldo(decimal valor)
            {
                labelSaldoDisponivel1.Text = (decimal.Parse(labelSaldoDisponivel1.Text) - valor).ToString();
            }

    No Form2 tenho uma caixa de texto e um botão. Se carregar no botão e o valor da caixa de texto for superior ao valor da labelSaldoDisponivel aparece uma label no Form2 a dizer: " Não tem dinheiro".

    Qual o código necessário?

    domingo, 18 de dezembro de 2016 19:00

Respostas

  • Uma forma de se fazer é:

    Criar um construtor no Form2 passando o valor como parâmetro.

    decimal _valor;
    public Form2(decimal valor)
    {
        InitializeComponent();
        _valor = valor;
    }

    ou caso os dois formulários estejam abertos ao mesmo tempo você pode ainda passar uma referência do Form1 como parâmetro para o Form2, aí só resgatar o valor que você deseja

    Form _form1 = null;
    
    //Construtor do form2
    public Form2(Form form1)
    {
        InitializeComponent();
    
        if(_form1 != null)
           _form1 = form1;
    }
    
    //----------------------------
    //No botão do Form2 
    //Para resgatar o valor do label no Form1
    //faça o seguinte:
    
    private void button1_Click(object sender, EventArgs e)
    {
          if( _form1 != null && _form1.Visible == true )
          {
              decimal saldo = decimal.Parse(form1.labelSaldoDisponivel.Text) - form1.valor;
              
              if(saldo < valor)
                  MessageBox.Show("Não tem saldo suficiente.");
           }
    }
          

    No (Form1) tanto a variável (saldo) quanto o label (labelSaldoDisponivel) tem que estar com o modificador de acesso setado para (public) para que eles fiquem disponíveis para o form2 ou simplesmente crie uma variável publica e use somente ela;

    Form1

    public decimal saldo;
    
    public void SubtrairSaldo(decimal valor)
             {
                 saldo =  decimal.Parse(labelSaldoDisponivel1.Text) - valor;
                 labelSaldoDisponivel1.Text = saldo.ToString();
             }
    
    

    Form2

    Form _form1 = null;

    //Construtor do form2
    public Form2(Form form1)
    {
        InitializeComponent();

        if(_form1 != null)
           _form1 = form1;
    }

    //----------------------------
    //No botão do Form2
    //Para resgatar o valor do label no Form1
    //faça o seguinte:

    private void button1_Click(object sender, EventArgs e)
    {
          if( form1 != null && form1.Visible == true )
          {
              decimal saldo = form1.saldo;
             
              if(saldo < valorDoSeuTextBox)
                  MessageBox.Show("Não tem saldo suficiente.");
           }
    }

    Ou ainda você pode criar uma função publica que retorno o saldo.

    No Form1

    private decimal saldo = algum valor; decimal GetSaldo() { return saldo; } ///-------- //No form2 decimal saldo = form1.GetSaldo();

    Não testei os códigos acima, segue um artigo caso queira entender um pouco melhor:

    http://www.linhadecodigo.com.br/artigo/1741/trocando-informacoes-entre-windows-forms-em-csharp.aspx

    Espero que ajude.

    segunda-feira, 19 de dezembro de 2016 01:24

Todas as Respostas

  • Olá,

    Você tem que usar métodos para passar os valores entre os forms, poste como está tentando fazer para auxiliarmos.


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    segunda-feira, 19 de dezembro de 2016 00:53
  • Uma forma de se fazer é:

    Criar um construtor no Form2 passando o valor como parâmetro.

    decimal _valor;
    public Form2(decimal valor)
    {
        InitializeComponent();
        _valor = valor;
    }

    ou caso os dois formulários estejam abertos ao mesmo tempo você pode ainda passar uma referência do Form1 como parâmetro para o Form2, aí só resgatar o valor que você deseja

    Form _form1 = null;
    
    //Construtor do form2
    public Form2(Form form1)
    {
        InitializeComponent();
    
        if(_form1 != null)
           _form1 = form1;
    }
    
    //----------------------------
    //No botão do Form2 
    //Para resgatar o valor do label no Form1
    //faça o seguinte:
    
    private void button1_Click(object sender, EventArgs e)
    {
          if( _form1 != null && _form1.Visible == true )
          {
              decimal saldo = decimal.Parse(form1.labelSaldoDisponivel.Text) - form1.valor;
              
              if(saldo < valor)
                  MessageBox.Show("Não tem saldo suficiente.");
           }
    }
          

    No (Form1) tanto a variável (saldo) quanto o label (labelSaldoDisponivel) tem que estar com o modificador de acesso setado para (public) para que eles fiquem disponíveis para o form2 ou simplesmente crie uma variável publica e use somente ela;

    Form1

    public decimal saldo;
    
    public void SubtrairSaldo(decimal valor)
             {
                 saldo =  decimal.Parse(labelSaldoDisponivel1.Text) - valor;
                 labelSaldoDisponivel1.Text = saldo.ToString();
             }
    
    

    Form2

    Form _form1 = null;

    //Construtor do form2
    public Form2(Form form1)
    {
        InitializeComponent();

        if(_form1 != null)
           _form1 = form1;
    }

    //----------------------------
    //No botão do Form2
    //Para resgatar o valor do label no Form1
    //faça o seguinte:

    private void button1_Click(object sender, EventArgs e)
    {
          if( form1 != null && form1.Visible == true )
          {
              decimal saldo = form1.saldo;
             
              if(saldo < valorDoSeuTextBox)
                  MessageBox.Show("Não tem saldo suficiente.");
           }
    }

    Ou ainda você pode criar uma função publica que retorno o saldo.

    No Form1

    private decimal saldo = algum valor; decimal GetSaldo() { return saldo; } ///-------- //No form2 decimal saldo = form1.GetSaldo();

    Não testei os códigos acima, segue um artigo caso queira entender um pouco melhor:

    http://www.linhadecodigo.com.br/artigo/1741/trocando-informacoes-entre-windows-forms-em-csharp.aspx

    Espero que ajude.

    segunda-feira, 19 de dezembro de 2016 01:24
  • Bom dia,

    Devido a falta de interação do autor dessa pergunta,

    essa thread está sendo fechada. Caso o problema ainda

    esteja ocorrendo, favor abrir uma nova thread.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 21 de dezembro de 2016 11:12
    Moderador