Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Erro ao capturar dados da class


alexandremanowar

Pergunta

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

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde

Então juninnn no outro form estou chamando da seguinte forma:

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
Acredito estar certo a forma que chamo só não entendo porque esta vazia a variável Então quintelab 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

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde

Pessoal verifiquei o código e a única coisa que esta fiz diferente foi gravar a session antes de chamar o form, não sei porque mas feito isso rolou, um camarada fez dessa forma em um outro fórum e rolou

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

Link para o comentário
Compartilhar em outros sites

  • 0

Que bom que conseguiu, foi por isso q perguntei como você chamava o outro form, você não postou mas tudo bem.

Quando você utiliza Module você escreve menos, porque não é necessário escrever o nome_do_modulo.nome_metodo quando você tem apenas um Module... quando tem dois Module e os nomes dos métodos forem iguais ae você precisa usar o prefixo antes do nome do método. Você não irá conseguir usar herança e se fizer referência em outro projeto você não vai conseguir utilizar os métodos do Module mesmo que eles sejam publicos, já com o shared você consegue tudo (quase tudo ^_^). No C# você utiliza static na classe para que todos os métodos e propriedades dela sejam static mas não é necessário que sua classe seja static para utilizar métodos static, no vb.net não tem classe shared, você pode ter métodos shared ou não, o que vai diferenciar é que os não shared só serão acessados por uma instância.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...