Categorieën
  • Mappen Bestanden (1)
  • MS Access Database (0)
  • Spelletjes Vb.net (2)
  • VB.net (5)
  • VBA Visual basic for applications (4)
  • XML LINQ (1)
  • Inhoud blog
  • Reeksen, Dictionaries, Hashtable
  • Vier op een rij
  • Het belang van Mappen en bestanden
  • XML en LINQ
  • Vb.net en Tekstbestanden
  • String
  • Zeeslag
  • Voorwaarden en Lussen
  • Over willekeurige getalen.
  • Van VBA naar VB.net
    Beoordeel dit blog
      Zeer goed
      Goed
      Voldoende
      Nog wat bijwerken
      Nog veel werk aan
     
    Zoeken in blog

    MS Access VBA VB.Net
    Ontwerpen van Database en VB.net voor Dummies
    03-04-2013
    Klik hier om een link te hebben waarmee u dit artikel later terug kunt lezen.Van VBA naar VB.net

    VB.net

    Waarom VB.net

    Wie VBA onder de knie heeft ondervindt in eerste instantie niet te veel problemen om naar VB.net over te stappen. Na enige initiatie en gewenning stelt men echter vast dat de mogelijkheden extreem ruimer zijn.
    Bovendien stelt Microsoft gratis een 'Expression' - versie van Visual studio ter beschikking.
    Het betreft hier werkelijk een bijzondere krachtige ontwikkelings omgeving, in het Engels IDE of Integrated Development Environment.
    Deze Blog heeft niet de pretentie om deze toepassing, ik werk met zowel de versie 2010 als 2012 , volledig uit de doeken te doen. Wel kan ik iedereen die graag programma's maakt, al zij het in de hobbysfeer zoals bij mezelf, deze ontwikkelingsomgeving warm aanbevelen.

    Waar te bekomen ?

    Via volgende link kan men gratis Visual Studio Express 2012 for Windows Desktop downloaden.
    Volg de instructies en na het dowloaden en de installatie rest u nog enkel de applicatie gratis te registreren op de website van Microsoft.

    Hoe onder de knie krijgen ?

    Ik zelf heb mijn toevlucht gezocht bij enkele boeken over VB.net, aanraders zijn :

    Deze Blog.

    Op deze blog wil ik graag ervaringen delen. Van practische problemen waarop ik gezocht heb geef ik hier graag mijn oplossing.
    De laatste tijd leg ik mij toe op het ontwikkelen van eenvoudige spelletjes zoals, 'Pietjesbak', 'Vier op een rij', 'Zeeslag'. Eens deze volledig op punt staan zal ik deze op deze blog ter beschikking stellen.

    03-04-2013 om 00:00 geschreven door Toon

    0 1 2 3 4 5 - Gemiddelde waardering: 2/5 - (4 Stemmen)
    Categorie:VB.net
    >> Reageer (0)
    05-04-2013
    Klik hier om een link te hebben waarmee u dit artikel later terug kunt lezen.Over willekeurige getalen.

    Willekeurige getallen genereren, is een getal even of oneven

    In veel programma's moeten op een bepaald ogenblik willekeurige getallen gegeneerd worden. In VB.net brengt men de code daartoe best onder in een 'class'. Hier worden een aantal class'es besproken, waar gewoon een willekeurig getal tussen twee grenzen gegeneerd wordt, maar ook waar tussen twee grenzen één zelfde waarde slechts éénmaal mag voorkomen. Ook code waarmee men kan bepalen indien het getal even of oneven is.

    clsWilGet1:Willekeurig getal van Byte-datatype (0 tot 255) tussen twee limieten mag maar éénmaal voorkomen.

    'System.Security.Cryptography moet in de class geImporteerd worden.
    Imports System.Security.Cryptography
    Public Class clsWilGet1
        Dim _set As BitArray
        Dim _min As Byte
        Dim _max As Byte
        Dim _tel As Integer
    

    
        Public Sub New(ByVal min As Byte, ByVal max As Byte)
            _min = min
            If (min > max) Then
                _max = min
            Else
                _max = max
            End If
            _set = New BitArray(_max - _min + 1)
            _tel = max - min
        End Sub
    

    
        Public Function GeefVolgendGetal() As Integer
            Dim randomGetal(0) As Byte
            Dim testGetal As Integer
            Dim rng As New RNGCryptoServiceProvider()
    
            Do While _tel >= 0
                rng.GetBytes(randomGetal)
                testGetal = CInt(randomGetal(0))
                testGetal = (CInt(testGetal) Mod (_max - _min + 1)) + _min
                If Not _set.Item(testGetal - _min) Then
                    _set.Set(testGetal - _min, True)
                    _tel -= 1
                    Return testGetal
                End If
            Loop
    
            Return -1
        End Function
    

    
        Public Sub Reset()
            _tel = _max - _min
            _set.SetAll(False)
        End Sub
    End Class
    
    

    clsWilGet2:Willekeurig getal van Integer-datatype tussen twee limieten mag maar éénmaal voorkomen.

    Public Class clsWilGet2
        Private _min, _max As Integer
        Private _set() As Integer 'Array of integers
        Private _index As Integer
        

    
        Public Sub New(ByVal min As Integer, ByVal max As Integer)
            _min = min
            If (min > max) Then
                _max = min
            Else
                _max = max
            End If
    
            'vorm de reeks
            _set = InitReeks()
    
        End Sub
    

    
        Private Function InitReeks() As Integer()
    
            Dim random As New Random()
            Dim getallen(_max - _min) As Integer
            Dim waarde As Integer = _min
            Dim tmp As Integer
            Dim index1 As Integer
            Dim index2 As Integer
    
            'vul de rees met de getallen
    
            For x As Integer = 0 To getallen.Length - 1
                getallen(x) = waarde
                waarde += 1
            Next
    
            'haal door elkaar 1000 iteraties moeten voldoende zijn
    
            For x As Integer = 0 To 1000
                'neem twee willekeurige indexen
                index1 = random.Next(0, getallen.Length)
                index2 = random.Next(0, getallen.Length)
    
                'haal door elkaar
                tmp = getallen(index1)
                getallen(index1) = getallen(index2)
                getallen(index2) = tmp
    
            Next
           
    
            Return getallen
    
        End Function
    

    
        Public Function GetNext() As Integer
    
            Dim result As Integer
    
            If (_index < _set.Length) Then
                result = _set(_index)
                _index += 1
            Else
                result = -1
            End If
    
            Return result
    
        End Function
    End Class
    

    clsWilGet3:Willekeurig getal van Integer-datatype tussen twee limieten mag maar éénmaal voorkomen.

    Public Class clsWilGet3
        Private rand As Random
        Private pool As List(Of Integer)
    
    Sub New(ByVal min As Integer, ByVal max As Integer) rand = New Random pool = New List(Of Integer)(max - min) For i As Integer = min To max pool.Add(i) Next End Sub
    Public Function GeefItem() As Integer If pool.Count = 0 Then Return -1 ' geef willekeurige index van de pool List. Dim index As Integer = rand.Next(0, pool.Count) ' geef weer. Dim draw As Integer = pool(index) ' verwijder van de pool List. pool.RemoveAt(index) Return draw End Function End Class

    clsWilGetal1, clsWilGetal2, clsWilGetal3 weergeven in een console-toepassing.

    Sub Main()
            
    
            Dim raad1 As New clsWilGet1(1, 100)
            Dim raad2 As New clsWilGet2(1, 100)
            Dim raad3 As New clsWilGet3(1, 100)
            For intTel As Integer = 0 To 20
                Console.Write(raad1.GeefVolgendGetal & " - " & raad2.GetNext & " - " & raad3.GeefItem & vbCrLf)
            Next
            Console.ReadLine()
        End Sub
    

    Willekeurig getal tussen twee limieten

    
    ''' Generen van een willekeurig getal tussen 0 en 7, men kan de limieten wijzigen
    

    
    Public Class clsWilGetal
        Private Shared _intWilGetal As Integer
    

    
    
        Public Shared ReadOnly Property Genereer() As Integer
            Get
                Dim intBoven As Integer = 6
                Randomize()
                _intWilGetal = CInt(Int((intBoven * Rnd()) + 1))
    
                Return _intWilGetal
            End Get
    
        End Property
    
    End Class
    

    Is een getal Even of Oneven?

    Sub OnOfEven()
            Dim intTeller As Integer = 1
            Dim strEven As String = "even"
            Dim strOneven As String = "oneven"
            Dim strResul As String = ""
            Do While intTeller < 100 'hier tot 100 maar kan meer zijn
                If intTeller Mod 2 = 0 Then 'getal is even
                    strResul = strEven
                Else
                    strResul = strOneven
                End If
                Console.WriteLine(intTeller & "is " & strResul)
                intTeller = intTeller + 1
            Loop
        End Sub
    

    Priemgetallen weergeven tot opgegeven bovengrens

    Public Function Priem(ByVal intMaxGrens As Integer) As String
            Dim i As Integer
            Dim j As Integer
            Dim bflag As Boolean
            Dim strResul As String = ""
            For i = 1 To intMaxGrens
                bflag = True
                For j = 2 To i / 2
                    If i Mod j = 0 Then
                        bflag = False
                    End If
                Next
                If bflag Then
    
                    strResul += i.ToString & " "
                End If
            Next
            Return Trim(strResul)
        End Function
    

    05-04-2013 om 00:00 geschreven door Toon

    0 1 2 3 4 5 - Gemiddelde waardering: 4/5 - (1 Stemmen)
    Categorie:VB.net
    >> Reageer (0)
    08-04-2013
    Klik hier om een link te hebben waarmee u dit artikel later terug kunt lezen.String

    Datatype String

    Het String datatype vertegenwoordigt reeksen van letters en cijfers, waar men met cijfers in principe geen wiskundige bewerkingen beoogt.
    VB.net laat diverse stringmanipulaties toe, waarvan enkele handige hieronder besproken worden.

     Public Sub StringMan()
            Dim mijnEersteString As String = ""
            Dim mijnTweedeString As String = ""
            Dim mijnDerdeString As String = ""
            Dim mijnVierdeString As String = ""
            Dim mijnVijfdeString As String = ""
            Dim mijnZesdeString As String = ""
            Dim mijnZevendeString As String = ""
            Dim mijnAchtsteString As String = ""
            Dim mijnNegendeString As String = ""
            
    De Format-methode: mijnEersteString = String.Format("{0}!", "Een allebeste goede morgen") Debug.Print("Mijn eerste string:" & mijnEersteString) 'Retourneert : Mijn eerste string:Een allebeste goede morgen! 'Gebruikmakend van de Format methode en de accoladetekens kan men zogenaamde substitutie verwezenlijken 'Meedere substituties zijn mogelijk, zoals bijvoorbeeld mijnTweedeString = String.Format("Mijn TV van merk {0} Type {1} Bouwjaar {2}", "Sony", "Bravia", 2012) Debug.Print("Mijn tweede string:" & mijnTweedeString) 'Retourneert : Mijn tweede string:Mijn TV van merk Sony Type Bravia Bouwjaar 2012 'De format methode kan met C duiding ook gebruikt worden voor munt aanduiding overeenstemmend met de plaatselijke instelling in Windows mijnDerdeString = String.Format("{0:C}", 100.75) Debug.Print("Mijn derde string:" & mijnDerdeString) 'Retourneert : Mijn derde string:€ 100,75 'De format methode met N duiding geeft correcte punctuatie van een getal mijnVierdeString = String.Format("{0:N}", 1234567890) Debug.Print("Mijn vierde string:" & mijnVierdeString) 'Retourneert = Mijn vierde string:1.234.567.890,00 'De format methode met P duiding geeft een getal in procenten terug mijnVijfdeString = String.Format("{0:P}", 0.25) Debug.Print("Mijn vijfde string:" & mijnVijfdeString) 'Retourneert : Mijn vijfde string:25,00% 'Met de format methode kan men bijvoorbeeld ook een telefoon of GSM nummer in een correctie vorm weergeven 'Nemen wij bijvoorbeeld een GSM nummer door de gebruiker ingegeven als 0475 23 34 89 Dim strGSM = "0475 23 34 89 " 'Met de Trim functie verwijderen wij alle eerste en laatste spaties strGSM = Trim(strGSM) 'Vervolgens verwijderen spaties binnen het nummer strGSM = strGSM.Replace(" ", "") 'controleren indien 10 cijfers opgegeven werden, dan de eerste nul verwijderen en dan getal laten vooraf gaan door 32 If strGSM.Length = 10 AndAlso Left(strGSM, 1) = "0" Then strGSM = "32" & Right(strGSM, 9) Dim lng As Long = CLng(strGSM) mijnZesdeString = String.Format("GSM-nr = +{0: ##### ## ## ##}", lng) Debug.Print("Mijn zesde string:" & mijnZesdeString) 'Retourneert : Mijn zesde string:GSM-nr = + 32475 23 34 89 End If 'Het gebeurt dat men een string wijzigt in een lus For intTel As Integer = 0 To 100 mijnZevendeString += "--" & intTel.ToString Next Debug.Print("Mijn zevende string:" & mijnZevendeString) 'Retourneert : Mijn zevende string:--0--1--2--3--4--5--6--7--8--9--10--11 enz 'Bovenstaande werkt maar is onefficient iedere lus moet de variabele in het geheugen opgehaald en vervangen worden 'Beter is om in dergelijke gevallen gebruik te maken van het StringBuilder-object Dim mijnBuilder As New System.Text.StringBuilder For intTel As Integer = 0 To 100 mijnBuilder.Append("--") mijnBuilder.Append(intTel) Next mijnAchtsteString = mijnBuilder.ToString Debug.Print("Mijn achtste string:" & mijnAchtsteString) 'Retourneert : Mijn achtste string:--0--1--2--3--4--5--6--7--8--9--10--11 enz 'Met de Substring-methode kan mijn een vooraf bepaald gedeelte van een string afzonderen mijnNegendeString = "Uit deze string wordt een bepaald gedeelte afgezonderd" mijnNegendeString = mijnNegendeString.Substring(9, 6) Debug.Print("Mijn negende string:" & mijnNegendeString) 'Retourneert : Mijn negende string:string End Sub

    08-04-2013 om 11:44 geschreven door Toon

    0 1 2 3 4 5 - Gemiddelde waardering: 1/5 - (1 Stemmen)
    Categorie:VB.net
    >> Reageer (0)
    09-04-2013
    Klik hier om een link te hebben waarmee u dit artikel later terug kunt lezen.Vb.net en Tekstbestanden

    Creëren, Inlezen en schrijven naar tekstbestanden.

    Public Sub LezenTekstBestand_1() 
    'Er bestaat een tekstbestand tweede.txt in de map van de toepassing
    Dim mijnLezer As New IO.StreamReader("tweede.txt")
    Dim mijnLijn As String = ""
    While Not IsNothing(mijnLijn)
    mijnLijn = mijnLezer.ReadLine
    If Not IsNothing(mijnLijn) Then
    Debug.Print("Ingelezen tekstbestand:" & mijnLijn)
    End If
    End While
    End Sub
    

     Public Sub CreerTekstBestand_1()
    Dim mijnPad = IO.Directory.GetCurrentDirectory & "TekstmijnTekst.txt"
    If IO.File.Exists(mijnPad) = False Then
    ' Indien het tekstbestand niet bestaat creër het
    Dim sw As IO.StreamWriter = IO.File.CreateText(mijnPad)
    sw.WriteLine("Dit is de eerste lijn")
    sw.WriteLine("Dit is de tweede lijn")
    sw.WriteLine("Dit is de derde lijn")
    sw.Flush() 'Alles die in de buffer geschreven wordt opgeslagen in het bestand terwijl de buffer geledigd wordt.
    sw.Close()
    ' Indien het bestaat verwijder het en creër opnieuw
    Else
    IO.File.Delete(mijnPad)
    Dim sw As IO.StreamWriter = IO.File.CreateText(mijnPad)
    sw.WriteLine("Dit is de eerste nieuwe lijn")
    sw.WriteLine("Dit is de tweede nieuwe lijn")
    sw.WriteLine("Dit is de derde nieuwe lijn")
    sw.Flush()  'Alles die in de buffer geschreven wordt opgeslagen in het bestand terwijl de buffer geledigd wordt.
    sw.Close()
    End If
    ' Bestand openen en inlezen
    Dim sr As IO.StreamReader = IO.File.OpenText(mijnPad)
    Do While sr.Peek() >= 0 'Geeft een integer overeenkomstig het volgende te lezen karakter Geeft -1 indien geen karakters meer te lezen zijn.
    Debug.Print(sr.ReadLine())
    Loop
    sr.Close()
    End Sub
    

     Public Sub Schrijven_en_Lezen_1()
    If Microsoft.VisualBasic.FileIO.FileSystem.FileExists("TekstEerste.txt") Then
    FileIO.FileSystem.WriteAllText("TekstEerste.txt", "-een", vbTrue)
    Dim strGelezen As String = Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText("TekstEerste.txt")
    MsgBox(strGelezen)
    End If
    End Sub
    

    Public Sub Schrijven_1()
    If Microsoft.VisualBasic.FileIO.FileSystem.FileExists("TekstDerde.txt") Then
    Dim schrijver As New IO.StreamWriter("TekstDerde.txt")
    Dim sb As New System.Text.StringBuilder()
    Dim i As Short = 0
    For i = 1 To 5
    sb.AppendLine("xxxxxxxxxxxxxxx")
    sb.AppendLine(i.ToString)
    Next
    schrijver.Write(sb.ToString)
    schrijver.Close()
    End If
    End Sub
    

     Public Sub schrijven_2()
    'met system.IO kan men een tekstbestand maken
    Dim strStartUp As String = Application.StartupPath
    MsgBox("Startop pad : " & strStartUp)
    MsgBox(My.Resources.Pad)
    If Not IO.File.Exists(My.Resources.Pad & "Vierde.txt") Then
    Using schrijver As IO.StreamWriter = IO.File.CreateText(My.Resources.Pad & "Vierde.txt") ' retourneert een streamWriter
    schrijver.WriteLine("Mijn eerste lijn")
    schrijver.Close()
    End Using
    Else
    'Mijn eerste lijn wordt overschreven
    Dim schrijver As New IO.StreamWriter(My.Resources.Pad & "Vierde.txt")
    Using schrijver
    schrijver.WriteLine("Mijn nieuwe eerste lijn")
    schrijver.WriteLine("Mijn tweede lijn")
    schrijver.Close()
    End Using
    Using schrijver2 As IO.StreamWriter = IO.File.AppendText(My.Resources.Pad & "Vierde.txt")
    schrijver2.WriteLine("Mijn derde lijn")
    schrijver2.Close()
    End Using
    End If
    End Sub
    

    09-04-2013 om 00:00 geschreven door Toon

    0 1 2 3 4 5 - Gemiddelde waardering: 0/5 - (0 Stemmen)
    Categorie:VB.net
    >> Reageer (0)
    29-04-2013
    Klik hier om een link te hebben waarmee u dit artikel later terug kunt lezen.Reeksen, Dictionaries, Hashtable

    Reeksen = Arrays, Hashtable, Dictionaries

    Reeksen of in het Engels 'Arrays' worden ook in VBA en VB.net veelvuldig toegepast. Terwijl Dictionaries,Hashtables,ArrayList niet van toepassing zijn in VBA.

    Reeksen of Array

    Een Array of reeks houdt data-waarden van dezelfde soort, de één na de andere. De array class biedt nuttige methoden en eigenschappen, bijvoorbeeld voor het sorteren of het tellen van de elementen in de Array. Met Arrays kan men tijdens het uitvoeren van een programma allerlei data bewaren, bewerken en opvragen. Meest voorkomend zijn ééndimensionale en tweedimensionale Arrays terwijl ook meerdimensionale Arrays mogelijk zijn. Een Array heeft een unieke Index (begint steeds met 0) waarmee de waarde kan opgevraag worden.

    Declaren Array met Dim / Redim statement men moet de dimensie van de Array opgeven of wijzigen, of onmiddellijk de waarden toekennen :

    Dim strNamen() As String = {"Deblauwe", "Depoorter", "Verlinden", "Antheunis", "Brussens", "Carpentier", _
     "Feyters", "Geenens", "Hofkens","Impens", "Justaert", "Vanmaele", "Waelkens", "Eerdekens"}
     'ééndimensionale Array van het String data type.
     'een element opvragen, vb respectievelijk eerste en vijfde
     	strNamen(0) geeft "Deblauwe"
     	strNamen(4) geeft "Brussens"
     Ook zo kan men een Array Declaren (hier van 15 elementen) :
     Dim strNamenAnder(14) As String
     In een routine vult men dan de Array :
    	strNamenAnder(0) = "Deblauwe"
    	strNamenAnder(1) = "Depoorter"
    	.........
    	strNamenAnder(14) = "Verzele"
    Tijdens het programma kan men de grote van de Array wijzigen met Redim 
    men kan de vorige waarden al dan niet behouden :
    	Redim strNamen(5) de oorspronkelijke waarden worden alle gewist
    	Redim Preserve strNamen(25) de oorspronkelijke namen worden behouden, de bijkomende toegevoegd in een 
    	procedure
    
    		strNamen(14) = "Jensen"
    		strNamen(15) = "Fierens"
    		..........
    		strNamen(25) = "Debruyne"	
    

    Ondergrens en Bovengrens bepalen met LBound en UBound functies :

    		intOnder As Integer = LBound(strNamen) geeft 0
    		intBoven As integer = UBound(strNamen) geeft 25
    

    Interessante Methodes van het Array object :

    • Sort Array.Sort(strNamen) -> rangschikt alfabetisch of van klein naar groot
    • ReverseArray.Reverse(strNamen) -> keert volgorde om

    Declaren tweedimensionale Array met Dim statement, men moet de dimensie van de Array opgeven of of onmiddellijk de waarden toekennen :

    Public Sub TweeDim()
            Dim getallenTweeDim(,) As Integer = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}'Let op accoladen
    
            For i As Integer = 0 To 2
                For j As Integer = 0 To 2
    Debug.Print(String.Format("Waarde i {0} - Waarde j {1} - Waarde getallenTweeDim({2}  {3}) is {4}", i, j, i, j, getallenTweeDim(i, j)))
                Next j
            Next i
        End Sub
    geeft als resultaat :
    Waarde i 0 - Waarde j 0 - Waarde getallenTweeDim(0  0) is 1
    Waarde i 0 - Waarde j 1 - Waarde getallenTweeDim(0  1) is 2
    Waarde i 0 - Waarde j 2 - Waarde getallenTweeDim(0  2) is 3
    Waarde i 1 - Waarde j 0 - Waarde getallenTweeDim(1  0) is 4
    Waarde i 1 - Waarde j 1 - Waarde getallenTweeDim(1  1) is 5
    Waarde i 1 - Waarde j 2 - Waarde getallenTweeDim(1  2) is 6
    Waarde i 2 - Waarde j 0 - Waarde getallenTweeDim(2  0) is 7
    Waarde i 2 - Waarde j 1 - Waarde getallenTweeDim(2  1) is 8
    Waarde i 2 - Waarde j 2 - Waarde getallenTweeDim(2  2) is 9
    
    'nog een voorbeeld
    
    Public Sub TweeDim_1()
            Dim strBord(9, 9) As String
            For shtKol As Short = 0 To 9
                For shtRij As Short = 0 To 9
                    strBord(shtKol, shtRij) = shtKol.ToString & shtRij.ToString
                Next
            Next
            'grafisch weergeven
            Dim strRij As String = ""
            For shtrij = 0 To 9
                For shtkol = 0 To 9
    
                    strRij += strBord(shtkol, shtrij) & " "
    
                Next
                Debug.Print(strRij)
                strRij = ""
            Next
        End Sub
    geeft als resultaat :
    
    00 10 20 30 40 50 60 70 80 90 
    01 11 21 31 41 51 61 71 81 91 
    02 12 22 32 42 52 62 72 82 92 
    03 13 23 33 43 53 63 73 83 93 
    04 14 24 34 44 54 64 74 84 94 
    05 15 25 35 45 55 65 75 85 95 
    06 16 26 36 46 56 66 76 86 96 
    07 17 27 37 47 57 67 77 87 97 
    08 18 28 38 48 58 68 78 88 98 
    09 19 29 39 49 59 69 79 89 99 
    
    'Met een For Each constructie kan men ook door de Array heen stappen :
    
    		For Each strWaarde As String In strBord
    			Debug.Print(strWaarde)
    		Next
    

    Hashtable.

    Een hashtabel bewaart zijn data in paren van Sleutel(Key) en Waarde (Value). Vooraf aanduiden hoeveel paren een hashtabel zal bevatten hoeft niet.De Sleutel is van het integer data-type. Aan de hand van de Sleutel kan men snel de bijhorende waarde vinden.

    Public Sub Test_Hash_1()
            Dim mijnHash As New Hashtable
            mijnHash.Add(1, "antoon")  'blijkbaar is key een integer
            mijnHash.Add(2, "raymonde")
            mijnHash.Add(3, "joke")
    
            Dim shtAantal As Short = mijnHash.Count
            MsgBox(shtAantal)
            
            Dim strDum As String = Nothing
            For intDum As Integer = 1 To 3
                'met de ContainsKey methode weet men indien een bepaalde sleutel bestaat.
                If mijnHash.ContainsKey(intDum) = True Then
    
                    strDum += mijnHash(intDum) & vbCrLf
    
                End If
            Next
            MsgBox(strDum)
        End Sub

    Public Sub Test_Hash_2() Dim mijnAndereHash As New Hashtable Dim strDum As String = Nothing Dim strArray() As String = {"Antoon", "Raymonde", "An", "Koen", "Joke", "Wolf", "Mickey", "Charlotte"} For intDum As Integer = 0 To UBound(strArray) mijnAndereHash.Add(intDum + 1, strArray(intDum)) Next For intDum2 As Integer = 1 To mijnAndereHash.Count strDum += mijnAndereHash(intDum2) & vbCrLf Next MsgBox(strDum) Dim mijnDerdeHash As New Hashtable mijnDerdeHash = mijnAndereHash.Clone'Met de Clone methode wordt als het ware een copie gemaakt MsgBox(mijnDerdeHash(1)) mijnDerdeHash.Remove(1) ' met de Remove methode verwijdert men een paar MsgBox(mijnDerdeHash.ContainsKey(1)) ' geeft False MsgBox(mijnDerdeHash(4)) mijnDerdeHash.Remove(4) MsgBox(mijnDerdeHash.Count) ' toont zes gezien er twee verwijderd zijn. MsgBox(mijnDerdeHash(2)) ' raymonde MsgBox(mijnDerdeHash(8)) 'charlotte End Sub

    Public Sub Test_Hash_3() Dim mijnTabel As New Hashtable mijnTabel(1) = "Eén" mijnTabel(2) = "Twee" mijnTabel(3) = "Drie" mijnTabel(4) = "Vier" mijnTabel(5) = "Vijf" For Each element As DictionaryEntry In mijnTabel Debug.Print("sleutel:" & element.Key & " Waarde:" & element.Value) Next ' met de Contains en ContainsKey methodes nagaan indien de tabel een bepaalde sleutel bevat. If mijnTabel.Contains(1) Then MsgBox("met de methode contains: " & mijnTabel(1)) End If If mijnTabel.ContainsKey(2) Then MsgBox("met de methode ContainsKey: " & mijnTabel(2)) End If ' met de methode ContainsValue nagaan indien de tabel een bepaalde waarde bevat. If mijnTabel.ContainsValue("Drie") Then For Each element As DictionaryEntry In mijnTabel If element.Value = "Drie" Then MsgBox("met de methode ContainsValue :" & element.Key) End If Next End If 'met de TypeOf en de Is operator kan men nagaan welk datatype de waarde van een item in de Hashtabel is If TypeOf (mijnTabel(1)) Is String Then MsgBox("het is string") 'met de count property kan men het aantal sleutel waarde paren bekomen. 'met de clear methode kan men alle sleutel-waarde paren uit de tabel verwijderen. End Sub

    Public Sub Test_Hash_4() ' Eén HashTable kan verscillende datatypes bevatten. Dim gemengdeHash As New Hashtable gemengdeHash(1) = "Dit is een spring" gemengdeHash(2) = 1000 gemengdeHash(3) = False gemengdeHash(4) = 100 / 23 Dim intAant As Integer = gemengdeHash.Count Dim sng As Single = gemengdeHash(4) MsgBox("Deze tabel bevat " & intAant & "paren." _ & vbCrLf & "de vierde waarde is : " & sng) End Sub

    Dictionary

    Het Dictionary-object vertoont veel analogieën met het Hashtable-object maar heeft ontegensprekelijk voordelen vooral als het op performantie aankomt.
    Bij de declaratie geeft men de data-waarden op van de Sleutel (Key) en de Waarden (Values). Daarna moeten deze bij het gebruik van de dictionary gerespecteerd worden.

    Voorbeeld van een Dictionary

         Public Sub TestDictionary_av1()
            Dim avDictionary As New Dictionary(Of Integer, String)
            avDictionary.Add(1, "Antoon")
            avDictionary.Add(2, "Raymonde")
            avDictionary.Add(3, "An")
            avDictionary.Add(4, "Koen")
            avDictionary.Add(5, "Joke")
            avDictionary.Add(6, "Arno")
            avDictionary.Add(7, "Emiel")
            avDictionary.Add(8, "Toor")
    
            Dim intI As Integer = 0
            For intI = 1 To 8
                Debug.Print("Voor sleutel " & intI.ToString & " is de waarde {0}", avDictionary.Item(intI))
            Next intI
    
            ' het zelfde als bovenstaande kan ook met onderstaande constructie
            For Each slw As KeyValuePair(Of Integer, String) In avDictionary
                Debug.Print("Voor sleutel  {0} is de waarde {1}", slw.Key, slw.Value)
            Next slw
    
            ' een waarde kan men opvragen aan de hand van de sleutel
            Debug.Print("Voor sleutel 6 staat de waarde {0}", avDictionary(6))
    
            Dim waardeKol As Dictionary(Of Integer, String).ValueCollection = avDictionary.Values
            Debug.Print("avDictionary bevat volgende waarden : ")
            For Each StrWaarde As String In waardeKol
    
                Debug.Print("{0}", StrWaarde)
            Next
    
        End Sub

    Public Sub TestDictionary_av2() 'Ziehier een dictionary waarvan zowel sleutel as waarde van hetzelfde datatype zijn. Dim mijnDict As New Dictionary(Of String, String) 'Data voegt men toe met de Add methode mijnDict.Add("A", "Deze waarde heeft A als sleutel") mijnDict.Add("B", "Deze waarde heeft B als sleutel") mijnDict.Add("C", "Deze waarde heeft C als sleutel") mijnDict.Add("D", "Deze waarde heeft D als sleutel") 'Met de Count methode weet men hoeveel paren een Dictionary-object omvat Debug.Print("Mijn directory-object bevat {0} paren", mijnDict.Count) ' De Add method geeft een waarschuwing indien de sleutel ' reeds bestaat Try mijnDict.Add("D", "Maar deze sleutel bevindt zich reeds in de Dictionary") Catch ex As Exception Debug.Print("De sleutel D bestaat reeds in deze dictionary") End Try 'Een waarde opvragen kan met de Item property Debug.Print("Waarde opvragen met Item property : {0} ", mijnDict.Item("A")) 'Gezien Item de standaard property is moet deze niet vermeld worden Debug.Print("Om de waarde op te vragen mag de Item property weggelaten worden : {0}", mijnDict("B")) 'Met de Item property kan men ook de waarde wijzigen die met een sleutel 'geassocieerd is mijnDict("D") = "De waarde was oorspronkelijk D" Debug.Print("De gewijzigde waarde opvragen : {0}", mijnDict("D")) 'indien men de waarde probeert op te vragen van een niet bestaande sleutel 'krijgt men een foutbericht Try Debug.Print("Voor Sleutel X is de waarde {0} ", mijnDict("X")) Catch ex As Exception Debug.Print("Er is geen sleutel ""X""") End Try 'Indien men twijfelt indien een sleutelwaarde wel aanwezig is 'gebruikt men beter de TryGetValue methode Dim strTeZoekenWaarde As String = "" If mijnDict.TryGetValue("X", strTeZoekenWaarde) Then Debug.Print("De waarde voor sleutel X is {0}", strTeZoekenWaarde) Else Debug.Print("De sleutel X is niet gevonden") End If 'En alvorens een sleutel/wwarde in te voeren kan men vooraf 'controleren met de ContainsKey methode If Not mijnDict.ContainsKey("E") Then mijnDict.Add("E", "Dit is de waarde voor E") End If Debug.Print("Voor de sleutel E werd de waarde : {0} toegevoegd", mijnDict("E")) 'bij het gebruik van een For Each constructie worden de elementen 'opgehaald als KeyValuePair objecten For Each element As KeyValuePair(Of String, String) In mijnDict Debug.Print("Sleutel = {0}, Waarde = {1}", _ element.Key, element.Value) Next element 'wil men enkel de waarde ophalen maak dan gebruik van de Values property Dim enkelWaarde As Dictionary(Of String, String).ValueCollection = mijnDict.Values Debug.Print("Enkel waarden ophalen") For Each str As String In enkelWaarde Debug.Print("Waarde = {0}", str) Next str 'wil men enkel de sleutels ophalen maak dan gebruik van de Keys property Dim enkelSleutel As Dictionary(Of String, String).KeyCollection = mijnDict.Keys Debug.Print("Enkel Sleutels ophalen") For Each str As String In enkelSleutel Debug.Print("Sleutel = {0}", str) Next str 'met de Remove methode kan men een Sleutel/Waarde paar verwijderen Debug.Print("Met de Remove methode een sleutel/waarde paar verwijderen") mijnDict.Remove("E") If Not mijnDict.ContainsKey("E") Then Debug.Print("Sleutel ""E"" niet gevonden.") End If End Sub

    29-04-2013 om 00:00 geschreven door Toon

    0 1 2 3 4 5 - Gemiddelde waardering: 1/5 - (3 Stemmen)
    Categorie:VB.net
    >> Reageer (0)


    Archief per week
  • 29/04-05/05 2013
  • 08/04-14/04 2013
  • 01/04-07/04 2013
  • 25/03-31/03 2013

    E-mail mij

    Druk op onderstaande knop om mij te e-mailen.


    Gastenboek

    Druk op onderstaande knop om een berichtje achter te laten in mijn gastenboek


    Blog als favoriet !


    Blog tegen de regels? Meld het ons!
    Gratis blog op http://blog.seniorennet.be - SeniorenNet Blogs, eenvoudig, gratis en snel jouw eigen blog!