Toon posts:

[VB] Treeview

Pagina: 1
Acties:

Verwijderd

Topicstarter
:),

Ik heb een probleem, ik heb een heeele ingewikkelde loop die mijn VB treeview automatisch netjes vult. Hij maakt hier ook zelf gegenereerde node- key's voor aan. Het probleem is nu dat ik een manier moet vinden of een bepaalde node- key al bestaat ( voordat ik hem zelf toevoeg ). Ik wou eigenlijk een iets slimmere oplossing bedenken dan error afhandeling. Iemand enig idee?

Vraag in de verkorte versie:
Weet iemand hoe ik kan controleren of een bepaalde treeview node al aanwezig is?

Alvast bedankt.

Verwijderd

Hey,
Misschien kun je je vraag toch nog iets verduidelijken.
Hoe bouw jij je nodes op? Aan de hand van gegevens uit een database? Gebruik dan DISTINCT in je select-statement.
Of houdt anders bij (in een array ofzo) welke nodes je toevoegt.
Anderzijds lijkt er mij niks op tegen dat je gebruikmaakt van error-handling hoewel ik je gevoel van 'slordigheid' wel deel :)

Verwijderd

Topicstarter
>:)

Bedant voor je reply!, het probleem is dat ik de gegevens ophaal uit een textfile ( eigenlijk een VB module ), die zoekt naar bepaalde tags en waarde, maar deze tags kunnen vaker voorkomen ( welliswaar met verschillende waarden ). En op een sequentiele zoek door een tekstbestand kan ik moeilijk een distinct doen ( of ik zou alles eerst weer in een database moeten gooien, maar mijn applicatietje is nu 60 kb ( lang leven API calls ), en lekker met alles compatible + razendsnel, dat zou ik niet willen verpesten door database referenties te maken en zo'n omweg te bouwen. Maar als het uit een DB kwam was distinct i.d.d. een mooie oplossing.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 23:21

mulder

ik spuug op het trottoir

Gebruik GUID's voor de key's. Global Unique ID, heeeeeeeel erg uniek op je computertje, zelfs in netwerk geloof ik. En een 'NodeExists' functie maken. Volgens mij is er geen snellere manier dan alles langs fietsen. Maar ik heb al een tijdje geen VB meer gedaan.

oogjes open, snaveltjes dicht


Verwijderd

Het kan ook makkelijker, lijkt me :)

Je kan gewoon het volgende doen
code:
1
2
3
public sub NodeExisists(tvwTarget as Treeview, sKey as Stirng)
  NodeExists = Not (tvwTarget.Nodes(sKey) Is Nothing)
end sub

Ik heb het niet getest, maar dit moet volgens mij werken, zonder error handling, en is in ieder geval VEEEEL makkelijker dan GUID's ;)

Verwijderd

Foutafhandeling wel even uitzetten, anders krijg je een 'element not found'.

Zonder type-fouten (>:)) wordt het dan:
code:
1
2
3
4
Public Function NodeExists(tvwTarget As TreeView, sKey As String) As Boolean
On Error Resume Next
   Let NodeExists = Not (tvwTarget.Nodes(sKey) Is Nothing)
End Function

Verwijderd

Topicstarter
Bedankt voor de antwoorden! Is wel een mooie functie, werkt goed en snel, ben er erg blij mee. Ben alleen ook erg geinteresseerd geraakt in die GUIDS, heb er eigenlijk nog nooit van gehoord, kan iemand daar eens een voorbeeldje van geven?

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 23:21

mulder

ik spuug op het trottoir

Ik heb het veel in databases gebruikt, je zet bv vel ID op autonumber en kiest Replication ID. In VB kun je met:
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
Private Declare Function CoCreateGuid Lib "OLE32.DLL" _
    (pGUID As GUID) As Long

Private Declare Function StringFromGUID2 Lib "OLE32.DLL" _
    (pGUID As GUID, _
     ByVal PointerToString As Long, _
     ByVal MaxLength As Long) As Long

Private Type GUID
    Guid1 As Long
    Guid2 As Long
    Guid3 As Long
    Guid4(0 To 7) As Byte
End Type

Public Function CreateGUID() As String

    Dim udtGUID As GUID
    Dim sGUID As String
    Dim lResult As Long

    lResult = CoCreateGuid(udtGUID)

    If lResult Then
      sGUID = ""
    Else
      sGUID = String$(38, 0)
      StringFromGUID2 udtGUID, StrPtr(sGUID), 39
    End If

    CreateGUID = sGUID

End Function

deze keys zelf genereren.

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Op woensdag 12 december 2001 13:34 schreef El_Mundo het volgende:
Ik heb het veel in databases gebruikt, je zet bv vel ID op autonumber en kiest Replication ID. In VB kun je met:
[code]Private Declare Function CoCreateGuid Lib "OLE32.DLL" _
:? Denk dat ik nog wat aan VB ervaring mis... ziet er heeel erg indrukwekkend uit, maar ik heb nog geen idee waar je het nou ooit voor zou gebruiken. Kan je er misschien nog wat meer achtergrond info over geven? Wanneer je nou zo'n procedure aan zou willen roepen enzo? Vind het wel heeele B-) code! Ik neem aan dat je het gebruikt om een unieke key te genereren,

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 23:21

mulder

ik spuug op het trottoir

In een module zet je bovenstaande code.

Als je een node aanmaakt:
code:
1
2
3
Dim sKey As String
  sKey = CreateGUID
  tvTreeView.Nodes.Add , , sKey, "Blalalala"

Nogmaals, ik gebruikte het vooral voor de database, waar praktisch alle relaties n op m waren, zodat je er zeker van was dat er geen dubble id's in voor kwamen.

oogjes open, snaveltjes dicht

Pagina: 1