telefoonboek

Status
Niet open voor verdere reacties.

DJRevo

Gebruiker
Lid geworden
19 sep 2011
Berichten
46
Hoi,

Ik ben een tijdje geleden begonnen met het leren van Scripten met Visual Basic 2010. Ik ben begonnen met tutorials te volgen, en daaruit wil ik het scripten onder de knie krijgen.

Ik ben nu bezig met een telefoon boek, en heb de hele tutorial gevolgt, heb alles precies hetzelfde nagemaakt. Enkel krijg ik nu een foutmelding. Ik debug het programma en het word gestart. Je krijgt dan het normale front met aan de rechter kant de contact personen, aan de linker kant zit het knopje ''Add new contact'' wanneer je daarop drukt, krijg je een nieuw form open. Daar kan je vervolgens de gegevens invullen (naam, telefoonnummer). Daarna druk je op ''Save'' maar dan krijg ik de volgende foutmelding: Object reference not set to an instance of an object.

Dit is het bijbehorende script van de ''save'' button:

Code:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If My.Settings.Names Is Nothing Then
            If TextBox1.Text = "" Or TextBox2.Text = "" Then
                MsgBox("Must Fill all Fields")
            Else
                [B]My.Settings.Names.Add(TextBox1.Text + " - " + TextBox2.Text)[/B]
                My.Settings.Save()
                Me.Close()
            End If
        Else
            If TextBox1.Text = "" Or TextBox2.Text = "" Then
                MsgBox("Must Fill all Fields")
            Else
                My.Settings.Names.Add(TextBox1.Text + " - " + TextBox2.Text)
                My.Settings.Save()
                Me.Close()

            End If

        End If
        TextBox1.Clear()
        TextBox2.Clear()
        Form1.ListBox1.Items.Clear()
        For Each Name As String In My.Settings.Names
            Form1.ListBox1.Items.Add(Name)
        Next


    End Sub
Het dik gedrukte stuk, dat is het gedeelte waar de foutmelding vanaf komt.
e6otfo.jpg


Normaal gesproken zou die de ingevulde gegevens op moeten slaan.

Ik hoop dat iemand weet hoe je dit kan oplossen.

Met vriendelijke groeten
Maarten
 
Laatst bewerkt door een moderator:
Plaats de code in je bericht eens in codetags en met juiste inspringpunten. Zo is het geen lezen.
 
Code:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If My.Settings.Names Is Nothing Then
            If TextBox1.Text = "" Or TextBox2.Text = "" Then
                MsgBox("Must Fill all Fields")
            Else
                My.Settings.Names.Add(TextBox1.Text + " - " + TextBox2.Text)
                My.Settings.Save()
                Me.Close()
            End If
        Else
            If TextBox1.Text = "" Or TextBox2.Text = "" Then
                MsgBox("Must Fill all Fields")
            Else
                My.Settings.Names.Add(TextBox1.Text + " - " + TextBox2.Text)
                My.Settings.Save()
                Me.Close()

            End If

        End If
        TextBox1.Clear()
        TextBox2.Clear()
        Form1.ListBox1.Items.Clear()
        For Each Name As String In My.Settings.Names
            Form1.ListBox1.Items.Add(Name)
        Next


    End Sub

Sorry dat ik geen code tags had gebruikt :) nu wel, hoe je die inspring punten precies maakt dat weet ik niet... Als je de code namelijk hierin kopieert, staan ze automatisch goed geplaatst zoals ze horen.

Edit: Enkel de code tags ervoor dus :)
 
Veel beter zo :-)
Ik heb nog niet echt gekeken maar verander de + tekens eens in & tekens voor het aan elkaar plakken van strings.
 
Wanneer de + tekens in & tekens zijn verandert, en ik debug hem overnieuw. Dan krijg ik precies dezelfde fout melding.
 
Volgens mij moet dit er staan

Code:
TextBox1.Text [B]& " - " &[/B] TextBox2.Text
 
Je komt alleen in die regel als de voorwaarde "my.settings.names is nothing" geld. Dat wil dis zeggen dat je object daar niet bestaat.

mis je daar niet een regel om die toe te voegen? Je doet nu namelijk in beide delen van de IF-statement exact hetzelfde. Deze IF is er juist om te voorkomen dat je probeert iets te doen met my.settings.names indien die nog niet bestaat.

Code:
If My.Settings.Names Is Nothing Then
     <dit eerst oplossen zodat my.settings.names ook bestaat>
     <toevoegen>
else
     <object bestaat al, alleen toevoegen>
end if
 
Om eerlijk te zijn snap ik niet bepaald wat ik moet doen. Hoe moet je My.Settings.Names laten bestaan dan?
 
Heb je dit correct uitgevoerd?:

"Click on Project menu, then click on the last menu, (in this project: Simple Phone Book Properties)

Then click on Settings tab.

Add Names under Name Column, and System.Collections.Specialized.StringCollection under Type"
 
Ja, dat had ik al gedaan. Ik heb de tutorial precies hetzelfde nagemaakt.
 
Dan gaat er toch iets niet goed. Volgens die IF bestaat je setting namelijk niet. Ik vermoed dat het gewoon fout staat op het web. Zoals je ziet doen beide delen van de IF statement exact hetzelfde. Ik neem aan dat die origineel bedoeld was om precies die fout af te vangen. Ik kan het nu niet testen, maar mogelijk heb ik vanavond even tijd om het grondig na te kijken.

wat als je

Code:
my.settings.names = new System.Collections.Specialized.StringCollection()

toevoegd bij de eerste if?
 
Sorry voor het late antwoord, Maar ik moest gister weg.
Ik heb die lijn toegevoegd, Enkel krijg ik nu altijd de popup naar voren. Wanneer de gegevens ingevult staan en je drukt op save dan krijg je die popup (dat die ingevult is) en dan moet je op OK drukken en dan staat die in het lijstje erbij. Dit werkt perfect nu, Daar hoeft niets meer aan te gebeuren. En daar wil ik jou ook graag voor bedanken om mij te helpen! Maar nu het volgende, wanneer een aantal namen zijn toegevoegd. Dan kan je de search bar gebruiken op form 1. Enkel kan je daar alleen op naam zoeken (form2.textbox1) maar ik wil op meer dingen kunnen zoeken. Want dit is de lijst wat mijn collega's kunnen invullen: naam, nummer, woonplaats, leeftijd, werkervaring, beroep, loon, email etc etc. Dus zal het handig zijn dat ze bijvoorbeeld op alles of een aantal belangrijke dingen kunnen zoeken namelijk: Naam, beroep en woonplaats.

Ik ga zometeen de lay out verder afmaken en dan zal ik hier ook plaatsen welke textbox voor wat is.

De code:

Code:
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        Dim item As String = TextBox1.Text.ToString()
        Dim index As Integer = ListBox1.FindString(item)

        If index = -1 Then
            ListBox1.SelectedIndex = ListBox1.SelectedIndex
        Else
            ListBox1.SetSelected(index, True)
        End If
    End Sub
 
TextBox1 = Naam
TextBox2 = Nummer
TextBox3 = Woonplaats
TextBox4 = Leeftijd
TextBox5 = Werkervaring
TextBox6 = Beroep
TextBox7 = Loon
TextBox8 = Email
TextBox9 = Beschikbaar
TextBox10 = Laatste werkgever
TextBox11 = Gereedschap
TextBox12 = Werkkleding
TextBox13 = Diploma
TextBox14 = Provincie
TextBox15 = Extra info

Als het mogelijk is, zou ik het liefst op alles willen zoeken.
 
In principe is dat heel goed mogelijk, maar zet je programma dan wel goed op. Hoewel het voorbeeld niet slecht is, is het niet echt schaalbaar.

Ten eerste zijn er databases gemaakt om dit soort taken goed af te handelen. VB(.Net) is volledig in staat om om te gaan met alle databases.
Mocht je geen database willen gebruiken, moet je je datastructuur aanpassen. Dit programma propt alles in een enkele string. Dit wordt onhoudbaar met veel informatie.
Houd in je achterhoofd dat er al een programma genaamd "excel" is dit allemaal al kan :P Je kan eventueel ook excel (of open office) aansturen met VB.

Het is een leuk project om mee te leren, maar bijt je er op dit moment niet teveel in vast. Er zijn letterlijk tientallen methodes om zo'n project aan te pakken en dit voorbeeld, hoewel leerzaam, gaat voorbij aan bijna alle echte technieken die worden gebruikt. Kijk in ieder geval naar het extern opslaan van de informatie in een aparte file. Kijk ook hoe je deze hoeveelheid informatie effectief bij elkaar kunt houden (class / struct).

Kan het met de huidige aanpak? Ja, absoluut. Maar je bent dan op een gegeven moment meer bezig met de limitaties van je aanpak dan verder bouwen.
 
Ik heb al goed zitten kijken naar Databases, enkel zou ik niet weten hoe ik dat zelf kan realiseren. Ik heb nog nooit echt met databases gewerkt, enkel met Excel op school. Daar heb ik mijn diploma ook voor gehaald. (ECDL) Access het echte database programma heb ik overigens nog nooit gebruikt.

Een collega van mij had al een redelijke lijst gemaakt met Excel, maar dit is denk ik veel gemakkelijker. Dit programma waar ik nu mee bezig ben werkt gewoon vrij makkelijk. Je start het op, De contactpersonen staan in de lijst. Met alle gegevens erachter en een label helemaal bovenaan (zodat je weet waar het voor staat) tussen de gegevens staan streepjes. de linker kant klik je enkel op Add new contact, vervolgens vul je alle textboxes in en druk je op save. dan komen ze direct er goed georganiseerd bij te staan.

De enige punten wat ik nog zou willen:

- Zoek functie vergroten
- Horizontale scroll bar in Form1.Listbox1
- als je de contact persoon selecteerd, dan zou ik nog een button aan de linker kant willen hebben waar je de gegevens kan editen zodat je in een soort zelfde schermpje uitkomt als de ''add new contact form'' Zodat je daar alle gegevens kan aflezen en eventueel ook kan aanpassen. Als het kan zou ik dan ook gewoon dubbelklik op de contactpersoon willen doen en dat die dan direct overspringt naar een nieuw form om daar de gegevens automatisch in een zelfde textbox te plaatsen.

Hoop alsnog dat dit te realiseren is. Als jij mij zou kunnen helpen met een database anders wat alsnog werkt via een programma, dat zou ook top zijn!
 
Zoekfuncties vergroten? Wil je dat men tekst in de ListBox kan vinden? Of heb je dat al?
Wat wil je precies?

Over die horizontale scrollbar in de ListBox:

Even de property HorizontalScrollBar op True zetten.
 
nou er staat een textbox boven de listbox, in de textbox zit dat command wat ik liet zien. Alleen nu kan je enkel op naam zoeken. Dus wanneer je een naam intypt dan zal die hem zoeken. maar nu wil ik bijvoorbeeld ook op bedrijf kunnen zoeken. en beroep. en dat doet die niet.
 
En bedankt voor die property setting :) had hem over het hoofd gezien :)
Had eerst het script toegevoegd.

Horizontalscroll.enabled
Horizontalscroll.Visible

Dat had ik eerst toegevoegd, gewoon om te kijken wat die ging doen. maar er verscheen der geen..
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan