Toon posts:

[vb.NET] listbox vullen met outlook gegevens.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Het volgende ik wil een listbox vullen met gegevens van contact die ik haal uit outlook. Dit heb ik al werkend, ik wil alleen zodra ik mijn programma start dat hij deze vult.

Hoe moet ik dit doen..want ik krijg met deze code elke keer een nullPointerException terwijl hij in de debug mode wel goed de namen doorloopt.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Public Class Form1
    Inherits System.Windows.Forms.Form

    'connect to outlook 
    ' Create Outlook application.
    Dim oApp As Outlook.Application = New Outlook.Application

    ' Get namespace and Contacts folder reference.
    Dim oNS As Outlook.NameSpace = oApp.GetNamespace("MAPI")
    Dim cContacts As Outlook.MAPIFolder = oNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)

    ' Get the first contact from the Contacts folder.
    Dim oItems As Outlook.Items = cContacts.Items
    Dim oCt As Outlook.ContactItem

    Dim oCount = cContacts.Items.Count()

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLaden.Click
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'Dit stuk is van belang om mijn listbox te vullen.
        For I As Integer = 1 To oCount
            Me.oCt = oItems.GetNext()

            'fill the combobox with the addressbook members
            Me.ListBox1.Items.Add(oCt.FullName)
        Next
        'Tot hier

    End Sub
End Class


Wanneer ik voor oCt.FullName -- I invul dan laat hij deze nummers wel goed zien.
Hoe kan dat?

[ Voor 49% gewijzigd door Verwijderd op 15-04-2004 18:29 ]


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Zet je code tussen code tags, geef aan welke regel verantwoordelijk is voor de fout en post in eerste instantie alleen relevante code.

Verwijderd

Topicstarter
bigbeng schreef op 15 april 2004 @ 17:53:
Zet je code tussen code tags, geef aan welke regel verantwoordelijk is voor de fout en post in eerste instantie alleen relevante code.
sorry zag net pas dat hij de windows generated code ook liet zien. Heb tussen quotes gezet wat van belang...is

Nu heb ik dit gedaan, heb ik het achter een knop gehangen. Wanneer ik elke keer op de knop druk dan doet hij het wel, maar ik wil dit automatisch laten doen.

code:
1
2
3
4
5
6
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLaden.Click

        Me.oCt = oItems.GetNext
        Me.ListBox1.Items.Add(oCt.FullName)

    End Sub

[ Voor 36% gewijzigd door Verwijderd op 15-04-2004 19:15 ]


  • Yoeri
  • Registratie: Maart 2003
  • Niet online

Yoeri

O+ Joyce O+

(overleden)
als je het eens automatisch laat doen, maar daarvoor een timer van een paar seconden zet ... het oude DoEvents moest in vb zorgen dat alles afgehandeld was voor je aan de volgende taak begon, dit probleem lijkt daar op

Kijkje in de redactiekeuken van Tweakers.net
22 dec: Onze reputatie hooghouden
20 dec: Acht fouten


Verwijderd

Topicstarter
het bleek heel simpel te zijn:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        'connect to outlook 
        ' Create Outlook application.
        Dim oApp As Outlook.Application = New Outlook.Application

        ' Get namespace and Contacts folder reference.
        Dim oNS As Outlook.NameSpace = oApp.GetNamespace("MAPI")
        Dim cContacts As Outlook.MAPIFolder = oNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts)
        Dim contact

        'Place all the items in the listbox.
        For Each contact In cContacts.Items
            Me.ListBox1.Items.Add(contact.FullName)
        Next

        'Clear all
        oApp = Nothing
        oNS = Nothing
        cContacts = Nothing
        contact = Nothing


Ik heb dit nu wel voor elkaar, maar nu wil ik dat ik FullName in de listbox zie maar dat de rest van de gegevens, zoals adres, woonplaats etc. ook ergens opgeslagen worden. Misschien in een array ofzo? ZOdat ik later deze gegevens aan de hand van de geselecteerde FullName kan ophalen en invullen in excel. Is dit mogelijk?

[ Voor 21% gewijzigd door Verwijderd op 15-04-2004 21:52 ]


Verwijderd

maak gewoon een klasse aan "contact" waaar je alle gegevens van een contact in dropt dan aan je combobox het contact object toevoegen , in je contact klasse moet je dan de tostring methode overriden en wat je dan daar zet verschijnt in de combobox,

op het selectetchanged event kan je het selectedItem opvragen waar dan je contactobject inzit en daaruit kan je dan al je contactgegevens gaan uithalen

:O

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Verwijderd schreef op 16 april 2004 @ 11:32:
maak gewoon een klasse aan "contact" waaar je alle gegevens van een contact in dropt dan aan je combobox het contact object toevoegen , in je contact klasse moet je dan de tostring methode overriden en wat je dan daar zet verschijnt in de combobox,
Dat werkt natuurlijk wel, maar ik vind dit zo geen mooie oplossing. Je legt nl. in je Contact class vast wat er moet getoond worden in je combobox.
Het is beter als je die verantwoordelijkheid aan je combobox toevertrouwd dmv de DisplayMember property.
edit:
Dat werkt dus
:O
Dit hoeft nu ook weer niet.

[ Voor 3% gewijzigd door whoami op 16-04-2004 11:51 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Maar al die andere waardes waar sla je die op dan? Want ik wil ze later weer gaan gebruiken?

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Verwijderd schreef op 16 april 2004 @ 13:04:
Maar al die andere waardes waar sla je die op dan? Want ik wil ze later weer gaan gebruiken?
Die zijn opgeslagen in je 'Contact' class. Door die ToString() te overriden, of door de DisplayMember property te setten, kan je bepalen welke member van die class er moet getoond worden in je combobox.
Het volledige object zit in de Items - collectie van je Combobox.

code:
1
Contact c = (Contact)myComboBox.Items[0];

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 16 april 2004 @ 13:08:
[...]


Die zijn opgeslagen in je 'Contact' class. Door die ToString() te overriden, of door de DisplayMember property te setten, kan je bepalen welke member van die class er moet getoond worden in je combobox.
Het volledige object zit in de Items - collectie van je Combobox.

code:
1
Contact c = (Contact)myComboBox.Items[0];
Hmm...sorry ben een beetje een lake. Wat ik nu al had vond ik eigenlijk wel vet, maar wat je nu zegt snap ik echt niet. Kun je misschien een voorbeeld stukje laten zien? THanx...

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Hetgeen je nu hebt, voegt dus eigenlijk enkel de namen toe aan je listbox.

Als je wilt dat je alle gegevens kunt benaderen, dan zal je niet enkel een string (naam), maar een volledig object aan je listbox moeten adden:

Stel bv. dat je een custom class 'Contact' hebt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Contact
{
     private int        _id;
     private string   _naam;
     private string   _adres;

     public int Id
     {
        get
        {
            return _id;
        }
        set
        {
            _id = value;
        }
     }

     public string Naam
     {
          get
          {
                 return _naam;
          }
          set
          {
                _naam = value;
          }
     }
     // nog properties ....

     public Contact( int id, string name, string adres)
     {
           Id = id;
           Naam = name;
           Adres = adres;
     }
}


Als je dus een object van deze class toevoegt aan je listbox/combobox, dan heb je eigenlijk alle gegevens tot je beschikking. Alle gegevens zitten dan nl. als 'object Contact' in de Items collectie van je listbox.

Als je dan ook nog de DisplayMember van je ListBox zet op één van de properties van je Contacts class, dan wordt de inhoud van die property getoond in je ListBox:

code:
1
2
3
4
5
6
myListBox.DisplayMember = "Naam";

for( int i = 0; i < 5; i ++ )
{
   myListBox.Items.Add (new Contact(i, "naam" + i.ToString(), "adres" + i.ToString());
}


Nu zitten dus alle gegevens in je ListBox, en wordt de naam van iedere persoon getoond.
Als je nu het adres van een bepaalde persoon wilt, dan kan je dit doen:

code:
1
MessageBox.Show( " Adres van de eerste persoon = " + ((Contact)myListBox.Items[0]).Adres);


offtopic:
/neem bij het handje - modus.
Dat gebeurt ook niet vaak. :+

https://fgheysels.github.io/

Pagina: 1