• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

PJM

[Resolvido] Array com objectos

10 mensagens neste tópico

Boas pessoal tudo bem?

Estou a tentar desenvolver uma aplicação que tem uma espécie de base de dados dos mail's do msn só que tenho um problema.

   
Public Class contactos_atributos
        Public Shared mail As String
        Public Shared nick As String
End Class

Dim contactos() As contactos_atributos

Private Sub Contactos_array(ByVal index, ByVal email, ByVal nick)
        contactos(index).mail = email
        contactos(index).nick = nick
End Sub

Private Sub mostra_dados() 
        For i = 1 To total 'Tentei usar o ubound(contactos) mas não deu, porque diz que o valor é 0 l
            list_hideme.Items.Add(contactos(i).mail)
        Next
End sub

Ele funciona, o problema é que os atributos ficam todos iguais ao do último, mas se eu meter um msgbox na função Contactos_array vejo que os contactos são todos diferentes.

Alguém sabe o que faço mal? É que nunca usei array de objectos em VB.net só em VB 6.0

Obrigado pela ajuda  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desde já obrigado pela resposta.

Estive a ver e acho que isso não serve para mim, visto eu adicionar os itens por um ciclo for, não há maneira de por da maneira que estou a fazer?

É que é bastante mais simples.

Já agora nos arrays (como estou a fazer) é possível ter um comando tipo isto:

 If lstEmpreg.Contains(nomePesquisar) Then

Ou temos de fazer manualmente do tipo:

for i=1 to total
      if (nomePesquisar = contactos(index).nick) then
         msgbox ("encontrou")
     else
        msgbox("não existe")
    end if
next i

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas simples do que as colecções não sei :thumbsup:

Na verdade é bastante mais simples e qual é o problema de adicionares no loop ?

(atenção não testado)

Dim lstEmpreg As New List(Of contactos_atributos)

Dim contacto As contactos_atributos
For x As Byte = 0 to 9
       contacto = New contactos_atributos
       contacto.mail = "aaa"
       contacto.nick = "bbb"
       lstEmpreg.Items.Add(contacto)
Next

A segunda questão que colocas está lá a resposta. Fazes uma pesquisa e vês se existe na colecção ou não.

Mas queres apenas usar dois campos ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, só quero usar dois campos.

E o que uso para adicionar ao array é o que tu usas-te, mas uso (index).

Tipo o objectivo é algo assim:

contacto(0).mail = mail0

contacto(0).nick = nick0

contacto(1).mail = mail1

contacto(1).nick = nick1

O problema é que o método que usei lá em cima, os atributos (nick e mail) ficam sempre iguais ao último, acho que os atributos não estão como arrays e não sei como o fazer.

Obrigado pela a ajuda e desculpem se me estou a fazer entender mal (se for preciso tento explicar de outra forma)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vamos lá esclarecer uma coisa: tens mesmo de usar arrays desta forma ou podes usar de outra maneira ?

É que no .NET existam as colecções que simplificam bastante o uso de arrays.

Viste o meu exemplo ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tenho de usar mesmo VB .net, mas tipo como estudo C++, usando array's aproximava-me da matéria, mas se dizes que as colecções simplificam o uso de arrays vou tentar.

Vou trabalhar num mini programa para perceber o funcionamento das listas e depois digo algo.

Thanks

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estive a ver e parece funcionar, porém o meu grande defeito é que não gosto de copiar mas sim compreender para depois fazer sozinho  :biggrin:

'Aqui iremos definir a lista lstEmpreg 
Dim lstEmpreg As New List(Of contactos_atributos) 'Para que serve o (Of contactos_atributos)? 

'Iremos atribuir os atributos da classe contactos_atributos a variavel contacto
Dim contacto As contactos_atributos

'Para o x = 0 até 9
For x As Byte = 0 to 9
       'O que faz este código?
       contacto = New contactos_atributos
       'Irá adicionar o mail actual do contacto
       contacto.mail = "aaa"
       'Irá adicionar o nick actual do contacto
       contacto.nick = "bbb"
       'Irá armazenar na lstEmpreg todos os campos do contacto
       lstEmpreg.Items.Add(contacto)
Next 'Termina o ciclo

Senão te importares, podias explicar-me as partes que não percebi? É que gostava de aprender este método, pois depois de compreender penso que consigo fazer na boa  :P

Cumprimentos e obrigado  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estive a ver e parece funcionar, porém o meu grande defeito é que não gosto de copiar mas sim compreender para depois fazer sozinho  :biggrin:

E isso é defeito ? Eu não acho.

O Of T é a declaração do tipo de lista que é, e é denominada strong type, ou seja, obriga a trabalhar com o tipo declarado. Por exemplo se definires como Dim lstEmpreg As New List(Of Integer) apenas podes adicionar valores inteiros à lista, o que ajuda bastante o programador e evita erros de código.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora