none
[C#] Erro com ao chamar outra form RRS feed

  • Discussão Geral

  • Fala galera, beleza? Eu tenho um formulário que ele vai abrir outro formulário com dados de um banco de dados... que no caso, ele abriria todos os valores de uma tabela no titulo da outro form, que abriria varias forms porque há vários valores na tabela, veja o código:

    namespace MeuEstoque.Classes
    {
        class ClasseLembrete
        {
            public string Titulo { get; set; }
            public string Mensagem { get; set; }
            public string CorLembrete { get; set; }
            public string CorTexto { get; set; }
            public string CorLinhas { get; set; }
            
            public void CarregarLembrete()
            {
                        Conexao conexao = new Conexao();
                        conexao.conectar();
                        string Query = "select * from Lembrete WHERE Usuario='" + Autenticacao.getUsuario() + "'";
                        SqlCommand cmd = new SqlCommand(Query, conexao.Con);
                        SqlDataReader dr = cmd.ExecuteReader();
    
                while (dr.Read())
                {
                    string Titulo = dr["Titulo"].ToString();
                    string Mensagem = dr["Mensagem"].ToString();
                    string CorLembrete = dr["CorLembrete"].ToString();
                    string CorTexto = dr["CorTexto"].ToString();
                    string CorLinhas = dr["CorLinhas"].ToString();
    
                    Lembrete l = new Lembrete();
                    l.tbTitulo.Text = Titulo;
                    l.tbMensagem.Text = Mensagem;
                    l.tbTitulo.Foreground = (SolidColorBrush)new BrushConverter().ConvertFrom(CorTexto);
                    l.tbMensagem.Foreground = (SolidColorBrush)new BrushConverter().ConvertFrom(CorTexto);
                    l.CorLembrete.Background = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLembrete);
                    l.rec1.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec2.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec3.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec4.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec5.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec6.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec7.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.Show();
                }
            }
    
            public void FecharLembrete()
            {
    
            }
        }
    }

    Nessa forma, tudo funciona certinho, mas eu queria poder fechar o formulário chamando outra void mas quando faço a modificação seguinte, ele só abre uma form com o último valor da tabela:

    using MeuEstoque.Janelas.Formulários;
    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Media;
    
    namespace MeuEstoque.Classes
    {
        class ClasseLembrete
        {
            public string Titulo { get; set; }
            public string Mensagem { get; set; }
            public string CorLembrete { get; set; }
            public string CorTexto { get; set; }
            public string CorLinhas { get; set; }
            
    	Lembrete l = new Lembrete();
    
            public void CarregarLembrete()
            {
                        Conexao conexao = new Conexao();
                        conexao.conectar();
                        string Query = "select * from Lembrete WHERE Usuario='" + Autenticacao.getUsuario() + "'";
                        SqlCommand cmd = new SqlCommand(Query, conexao.Con);
                        SqlDataReader dr = cmd.ExecuteReader();
    
                while (dr.Read())
                {
                    string Titulo = dr["Titulo"].ToString();
                    string Mensagem = dr["Mensagem"].ToString();
                    string CorLembrete = dr["CorLembrete"].ToString();
                    string CorTexto = dr["CorTexto"].ToString();
                    string CorLinhas = dr["CorLinhas"].ToString();
    
                    l.tbTitulo.Text = Titulo;
                    l.tbMensagem.Text = Mensagem;
                    l.tbTitulo.Foreground = (SolidColorBrush)new BrushConverter().ConvertFrom(CorTexto);
                    l.tbMensagem.Foreground = (SolidColorBrush)new BrushConverter().ConvertFrom(CorTexto);
                    l.CorLembrete.Background = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLembrete);
                    l.rec1.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec2.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec3.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec4.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec5.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec6.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec7.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.Show();
                }
            }
    
            public void FecharLembrete()
            {
    		l.Close();
            }
        }
    }
    

    Como fazer isso, que abra várias forms com os valores e que eu possa fechar com uma void?


    • Tipo Alterado Marcos SJ quarta-feira, 30 de março de 2016 19:58 How to / Not supported
    quarta-feira, 30 de março de 2016 17:35

Todas as Respostas

  • Que tipo de erro apresenta?

    Se voce quer passar informacao de um form ao outro tu tens de ter uma funcao que retorna valores e nao um void...


    A flower cannot blossom without sunshine, and man cannot live without love.

    quinta-feira, 31 de março de 2016 06:49
    Moderador
  • Bom dia Gerlanio!

    Confesso que ficou confuso, mesmo com sua linha de código, não é explicito seu erro e nem que tipo de informação quer passar.  

    Mas logo de cara, de um forms para outro, você precisa passar a informação(passagem por parâmetro), normalmente utilizam no evento do fechamento a captura da informação que quer. 

    Não sei o que quer, mas tenta ir no evento do fechamento do seu form e passa a informação que você quer para o outro form ou captura a informação e depois atribui para o novo form. 

    At.te, 


    • Editado Open Study quinta-feira, 31 de março de 2016 12:16
    quinta-feira, 31 de março de 2016 12:16
  • Eu parei para re-ler e vi que expliquei meio confuso... É tipo assim, na tabela do meu banco de dados tem vários dados, tenho uma form que assim que iniciar, ela inicia junto com todos os valores que tem no banco de dados, seria como um lembrete, cada dado do banco de dados inicia uma form separada, tipos várias forms... Um exemplo:

    Só que essa form de lembrete só abre várias form com todos os valores quando ele chama assim:

    public void CarregarLembrete()
            {
                        Conexao conexao = new Conexao();
                        conexao.conectar();
                        string Query = "select * from Lembrete WHERE Usuario='" + Autenticacao.getUsuario() + "'";
                        SqlCommand cmd = new SqlCommand(Query, conexao.Con);
                        SqlDataReader dr = cmd.ExecuteReader();
    
                while (dr.Read())
                {
                    string Titulo = dr["Titulo"].ToString();
                    string Mensagem = dr["Mensagem"].ToString();
                    string CorLembrete = dr["CorLembrete"].ToString();
                    string CorTexto = dr["CorTexto"].ToString();
                    string CorLinhas = dr["CorLinhas"].ToString();
    
                    Lembrete l = new Lembrete();
                    l.tbTitulo.Text = Titulo;
                    l.tbMensagem.Text = Mensagem;
                    l.tbTitulo.Foreground = (SolidColorBrush)new BrushConverter().ConvertFrom(CorTexto);
                    l.tbMensagem.Foreground = (SolidColorBrush)new BrushConverter().ConvertFrom(CorTexto);
                    l.CorLembrete.Background = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLembrete);
                    l.rec1.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec2.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec3.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec4.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec5.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec6.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec7.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.Show();
                }
            }

    E não quando está assim:

    Lembrete l = new Lembrete();
    
            public void CarregarLembrete()
            {
                        Conexao conexao = new Conexao();
                        conexao.conectar();
                        string Query = "select * from Lembrete WHERE Usuario='" + Autenticacao.getUsuario() + "'";
                        SqlCommand cmd = new SqlCommand(Query, conexao.Con);
                        SqlDataReader dr = cmd.ExecuteReader();
    
                while (dr.Read())
                {
                    string Titulo = dr["Titulo"].ToString();
                    string Mensagem = dr["Mensagem"].ToString();
                    string CorLembrete = dr["CorLembrete"].ToString();
                    string CorTexto = dr["CorTexto"].ToString();
                    string CorLinhas = dr["CorLinhas"].ToString();
    
                    l.tbTitulo.Text = Titulo;
                    l.tbMensagem.Text = Mensagem;
                    l.tbTitulo.Foreground = (SolidColorBrush)new BrushConverter().ConvertFrom(CorTexto);
                    l.tbMensagem.Foreground = (SolidColorBrush)new BrushConverter().ConvertFrom(CorTexto);
                    l.CorLembrete.Background = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLembrete);
                    l.rec1.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec2.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec3.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec4.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec5.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec6.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.rec7.Fill = (SolidColorBrush)new BrushConverter().ConvertFrom(CorLinhas);
                    l.Show();
                }
            }

    Eu precisaria que ela estiver como o segundo modo de código para mim poder fechar a form, com:

    public void FecharLembrete()
            {
    		l.Close();
            }

    Tentei explicar, conseguem entender? Hahaha

    quinta-feira, 31 de março de 2016 15:28
  • Conseguir! 

    O segundo jeito no final ele apresenta somente um form, correto? Do jeito do segundo, não vai funcionar. Pois você instância o objeto fora do  While, sendo assim ele vai repetir e os valores vai ser atribuído para um objeto, lembrando que esse objeto vai receber a informação do ultimo registro, pois até lá ele(While) retorna True. Quando você move essa declaração para dentro do While, a cada passagem é criado um novo, e por isso vários forms são abertos, cada um contento uma informação. 

    Pelo que entendi o primeiro jeito não funciona, pois ao realizar o fechamento de um, ele fecha os outros é isso? 

    Então, se for isso, tenta colocar:

    this.Close();

    Senão funcionar, tenta fazer isso:

    for (int cont = Application.OpenForms.Count - 1; cont >= 0; cont--)
    {
        if (Application.OpenForms[cont] == this)
    	{
              Application.OpenForms[cont].Close();
    	}
    }

    At.te,


    • Editado Open Study quinta-feira, 31 de março de 2016 16:59
    quinta-feira, 31 de março de 2016 16:45
  • Você entendeu perfeitamente o meu caso, mas estou escrevendo esses códigos dentro de uma classe chamada ClasseLembrete, esses forms como lembrete vai aparecer quando eu fizer o login na aplicação, aí eu quero fazer o void para fechar os lembretes quando eu clicar em sair para fazer o logoff da form. Entendeu? Hehe
    quinta-feira, 31 de março de 2016 19:30
  • Sim, eu entendo. 

    Mas acredito que aplicando esse código você consegue resolver. Talvez não esteja sabendo como fazer. 

    Caso queira, eu posso realizar um acesso e implementar essa parte pra você ver ou analisar e propor outra coisa, lembrando -> Isso é para mero apoio(Ajuda) pra você conseguir continuar com seu desenvolvimento. Só quero ajuda-lo.

    At.te,

    quinta-feira, 31 de março de 2016 20:27
  • Me envie seu skype para podermos manter contato.
    quinta-feira, 31 de março de 2016 20:30
  • Me manda um e-mail que te passo. openstudybr arroba ponto com 
    quinta-feira, 31 de março de 2016 20:35
  • Quando eu entrar no skype não esquecerei de lhe adicionar. Obrigado! (:
    quinta-feira, 31 de março de 2016 20:37