vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Knoten im Treeview finden 
Autor: Struppi
Datum: 19.04.14 11:52

Hallo zusammen,
ich habe ein Treeview für TechnischePlätze angelegt mit ca 9000 TechnischePlätze.
Das Treeview besteht aus 9 Ebenen. Wenn ich jetzt einen Datensatz anklicke, so möchte ich das
der entsprechende Knoten geöffnet und selektiert ist.
Wie kann ich unter den vielen Knoten (Parent und 8 childs) den richtigen Knoten finden.
Ich programmiere noch mit VB6.
Bedanke mich schon jetzt für Eure Unterstützung und wünsche Frohe Ostern.
Gruß Struppi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Knoten im Treeview finden 
Autor: Franki
Datum: 23.04.14 01:30

Hallo,

deine Frage ist etwas zu ungenau...

Zitat:


Das Treeview besteht aus 9 Ebenen. Wenn ich jetzt einen
Datensatz anklicke, so möchte ich das
der entsprechende Knoten geöffnet und selektiert ist.


Wenn du im Treeview etwas in einer untergeordneten Ebene anklicken kannst, dann ist die Ebene doch schon zumindest soweit geöffnet, denn sonst könntest du den entsprechenden Child (der auch ein Parent sein könnte) ja nicht anklicken. Und selektiert ist er normalerweise auch wenn du ihn angeklickt hast.

Was genau meinst du denn mit Datensatz? Ein Treeview hat eigentlich keine Datensätze. Hast du vielleicht eine Kombination von Treeview und Listview und willst im Listview etwas anklicken?

Zitat:


Wie kann ich unter den vielen Knoten (Parent und 8 childs)
den richtigen Knoten finden.


Was hast du denn für eine Datenbasis aus der dein Treeview gefüllt wird? Wenn du keine hast, dann musst du dich halt durchhangeln, wenn da z.B. eine DB dahinter steckt kannst du das auch über eine SQL Abfrage evtl. einfacher ermitteln. Kommt ganz drauf an was du machen möchtest.

Zitat:


Ich programmiere noch mit VB6.


Das spielt in diesem Fall keine Rolle, denn der Aufbau, bzw. die optische Darstellung von Treeview und oder Listview ist identisch von den Abhängigkeiten was wo angezeit wird, angeklickt werden kann usw. Das gleiche Problem hättest du auch unter .NET oder sogar uraltem DOS 6. Da gab es auch schon den Befehl "tree"

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Knoten im Treeview finden 
Autor: Struppi
Datum: 24.04.14 13:13

Hallo Franki,
vielen Dank für Deine Info.
Ich habe zwei Registerkarten, auf der Einen zeige ich z.B. Motordaten an.
Dann hole ich mir aus einer anderen Tabelle die TechnischenPlätze (Standorte die es in der Firma gibt)
Diese zeige ich als TreeView auf der 2. Registerkarte an. Wenn jetzt ein neuer Motor eingefügt wird, so kann ich zur 2. Registerkarte wechsel, den entsprechenden TechnischenPlatz aus dem Treeview anwählen und schon hat der Motor die entsprechende TechnischerPlatz-Nummer.
Dies funktioniert auch tadellos. Jetzt möchte ich aber in der 1. Registerkarte einen bestimmten Motor auswählen und dann sollte beim Wechsel auf die 2.Registerkarte der Knoten geöffnet und selektiert sein, der dem TechnischenPlatz des Motors entspricht.
Das heißt ich benötige eine Find Funktion die den entsprechenden Knoten findet.
Im Internet finde ich nur bis zu 2 Ebenen aber ich benötige 9 Ebenen.
Gruß Dirk
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Knoten im Treeview finden 
Autor: benne
Datum: 06.05.14 17:06

Hallo Struppi,

ein Knoten hat immer eine eindeutige ID.

Ich spreche meine Nodes immer über die ID an, mit folgendem Format:

ID_Indexname:WertIndex

Wenn also der Index für den Datensatz ID-MOTOR heißt und der Wert 4711 ist, dann hat
der Knoten den Schlüssel: ID_MOTOR:4711

Den Doppelpunkt nehme ich, damit ich später wieder Name und Wert des Schlüssels trennen kann.
So kann ich beim Anklicken eines Knotens spezifisch darauf reagieren.

Nach diesem Schema kann ich auch in großen Bäumen direkt den Knoten anwählen.

Allerdings macht eine Treeviev mit 9000 Knoten irgendwie keinen Sinn.

Ich hoffe, das hilft dir weiter.

Gruß
Benne
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Knoten im Treeview finden 
Autor: Struppi
Datum: 07.05.14 15:11

Hallo benne,
danke für Deine Info.
Kannst Du mir ein kleines Beispiel mit Programmcode zeigen damit
ich es vielleicht besser verstehe ?
Vielen Dank.
Übrigens : Wenn man die Technischen Plätze einer Firma als Baum darstellen will
kommen schon sehr viele Knoten zusammen. (Bei mir max. 9 Ebenen)
Gruß Struppi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Knoten im Treeview finden 
Autor: benne
Datum: 08.05.14 15:16

Hallo Struppi,

als Ebene verstehe ich eine Hierarchie die übereinander angeordnet ist.

Also:

Staaten
Länder
Kreise
Gemeinden
Bezirke

oder

Standorte
Hallen
Regale
Fächer
Schubladen


9 Ebenen sind ganz schön viel.

Um dir wirklich zu helfen, sollten wir wissen, auf welcher Datenbasis die ganze Geschichte läuft.
Sind die Ebenen jeweils in einer eigenen Tabelle?
Gibt es eindeutige Bezeichner? (ideal als Integer )

Damit das dann auch funktioniert müssten die Tabellen mit 1:n verknüpft sein.

Beispiel:
Standorte:
ID_Standort=1 , Deutschland
ID_Standort=2 , USA
ID_Standort=3 , China

Hallen:
ID_Standort=1, ID_Halle=1 , grüne Halle
ID_Standort=1, ID_Halle=2 , rote Halle
ID_Standort=2, ID_Halle=3 , blaue Halle

Regale:
ID_Halle=2, ID_Regal=4711 , Regal ABCD


Somit weiß man, das das Regal ABCD in der roten Halle in Deutschland ist.
Jede Tabelle bezieht sich auf den Index der darüberliegenden Tabelle.

Schick mal dein Datenmodell, dann sehen wir weiter.
Bevor man in den Programmcode geht, sollte man zuerst die Daten analysieren.

Gruß
Bernd

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Knoten im Treeview finden 
Autor: Struppi
Datum: 10.05.14 14:31

Hallo benne,

Do While Not dyTP1.EOF 'Ebene2
varTechnischerPlatz = dyTP1.Fields(0)
varEbene1 = BezEbene(varTechnischerPlatz, "1") 'MLHIDE
If Not NewNode Is Nothing Then
varKeyE1 = varTechnischerPlatz
Set NewNode = TreeView1.Nodes.add("TP-" & varKeyE0, tvwChild, "TP-" & varKeyE1, varEbene1, "open") 'MLHIDE
NewNode.Tag = varTechnischerPlatz
NewNode.ExpandedImage = "open" 'MLHIDE
NewNode.Image = "closed" 'MLHIDE
NewNode.EnsureVisible
End If

dyTP1.MoveNext ' Bewegen zum nächsten Publishers-Datensatz.
Loop

varKeyE0 ist hier eine eindeutige Nummer die in etwa so aussieht :
07-010-020-070-010-020-030-040-020
Jeder Nummernblock ist eine Ebene.

Ich möchte jetzt, wenn ich im Datensatz von, z.B. Motore, blättere, das wenn der Motor einen TechnischenPlatz hat, dieser entsprechende Knoten aktiviert ist wenn ich zur Baumanzeige wechsel.

Vielen Dank für Deine Bemühungen.
Ein schönes Wochenende
Gruß Struppi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Knoten im Treeview finden 
Autor: benne
Datum: 12.05.14 07:55

Hi,

so richtig verstanden habe ich das jetzt nicht.

Du legst den Node an und beziehst dich auf ein Parent, ebenfalls mit "TP-xxx" als Key.

Wie viele Tabellen gibt es denn? Wo ist die Logik?

Mit fällt noch auf, dass der Befehl node.ensurevisible beim Anlegen keinen Sinn macht.
Die Laufzeit wird dadurch verlängert. Außerdem wird der Tree ohnehin mit .painting = false aufgebaut.

Vielleicht können andere User deine Daten besser verstehen?

mfg

Benne
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel