Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alexandremanowar

[Resolvido] Erro ao capturar dados da class

Recommended Posts

Boa tarde

 

Eu preciso que na minha ao logar grave certos dados que vou usar em todos os forms do meu aplicativo, então resolvi criar uma class quando o sistema carrega ele acessa a class e manda os dados isso esta funcionando, porém quando quero carregar os dados no outro form ele não traz nada! Vou mostrar como fiz, é bem uma idéia de sessio mesmo que é feito nos aplicativos web:

 

Essa é a class:

Public Class session

    Private Shared logado As String
  
    Public Shared Property DadosLogado() As String
        Get
            Return logado
        End Get
        Set(ByVal value As String)
            logado = value
        End Set
    End Property

End Class

Quando o aplicativo carrega o form principal chama esse class e grava dessa forma:

 

 Private Sub MDIHome_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                
        session.DadosLogado = "gravei a session"

    End Sub

 

Até esta ok para saber se esta gravando mesmo fiz isso no form principal:

 Private Sub MDIHome_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                
        session.DadosLogado = "gravei a session"
        Dim str As String = session.DadosLogado

        MessageBox.Show(str.ToString)
    End Sub

 

Ele retornou o MessaBox ok, logo gravou e leu, porém quando quero ler os dados que foram gravados nessa entrada a partir de outro form, não esta funcionando, veja como pego em outro form:

Private Sub frmADM_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        
        Dim str As String = session.DadosLogado

        MessageBox.Show(str.ToString)


    End Sub

Quando executo ele me da a seguinte mensagem de erro:

 

System.NullReferenceException was unhandled by user code

Referência de objeto não definida para uma instância de um objeto.

 

 

Ou seja esta dizendo que a variável str esta vazia. Onde estou errando? Preciso que as informações que carregam no form inicial fique gravada nessa class para que quando eu precisar dessa informação em um form qualquer basta buscar na class, fechando o programa tudo se perde, e ao carregar entra as novas informações que são gravadas novamente na classs e posso puxar de outro form chamando a class.

Alguém sabe como resolver isso?

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aledandre até onde sei, num da pra você fazer isso que esta desejando sem gravas essas informações em session, viewstate ou tabela temporaria, pois do jetito q você mesmo fez, esse objeto é dispensado assim q o form é dispensado, para ter acesso a ele em outros forms so através de session ou viewstates.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voa tarde Ivan

 

Certo e como eu faria uma session para aplicativo desktop? Teria como você me explicar fazendo um exemplo por favor ou me passar um tutorial de como criar session?

 

Obrigado pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Ivan esse post é meu mesmo e deixei nele a mesma dúvida que postei aqui.

 

Mas veleu pela força vou continuar pesquisando

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde

 

Então pelo que entendi se eu declara como Shared como fiz em vb.net seria o mesmo que declarar static em C#, ou estou errado? Na minha class não coloquei Shared porque acho que não é possível. Estou enganado? Não é dessa forma que se declara como static uma class e propriedades em vb.net?

 

Public Class session

    Private Shared logado As String

    Public Shared Property DadosLogado() As String
        Get
            Return logado
        End Get
        Set(ByVal value As String)
            logado = value
        End Set
    End Property

End Class

Valeu pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na classe não dá. Tem que ser nos métodos e propriedades.

 

 

Está correto desse jeito. Testei aqui e funcionou.

Form1

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        session.DadosLogado = "POkokok"
        Form2.Show()
    End Sub
End Class

 

Form2

Public Class Form2

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim str As String = session.DadosLogado

        MessageBox.Show(str.ToString)

    End Sub
End Class

session

Public Class session

    Private Shared logado As String

    Public Shared Property DadosLogado() As String
        Get
            Return logado
        End Get
        Set(ByVal value As String)
            logado = value
        End Set
    End Property

End Class

 

Executando ele mostrou a mensagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde

 

Pessoal analisando o que o scorpio disse sobre o código estar funcionando sendo que esta identico ao meu e a única diferença é que ele grava a session antes de chamar o form, eu estava fazendo ao contrário feito essa correçaõ funcionou, não sei o porque! Porém ainda vem a pergunta o static no vb é shared ou o module? Realmente procurei na net e o shared é static porém para variáveis e tal mas para class não sei o que usar, se alguém souber me informe por favor

 

No demais obrigado pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Shared para toda a classe nunca vi.

 

Mas você pode colocar todos os métodos e propriedades.

 

Aliás, eu me lembro vagamente de algo que coloca na classe para ela não poder ser instanciada. Vou dar uma procurada.

 

 

 

Você está usando .Show ou .ShowDialog ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade depende da opção que é acessada no sistema, uso show para formulários simples que trabalharão individual e showdialog para form que são dependentes de um outro já aberto, enfim depende da função do form

 

Valeu pela força

Compartilhar este post


Link para o post
Compartilhar em outros sites

POrque se você usa o ShowDialog, ele para a execução na linha que chamou, até que seja fechado.

Pode ser por isso que estava dando erro. Como você atribuia o valor depois de chamar a tela, ese só vai colocar o valor quando fechar.

 

 

Abraços!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.