User Passwort
 Passwort speichern Passwort vergessen?
 
 
 
 Alle Foren
 PDA-Dev :: Windows Mobile
 Windows Mobile - Allgemeines
 Ordnerauswahl-Dialog
Autor Vorheriges Thema Thema   

pda-dev

pda-dev

Forum Admin


554 Beiträge

Erstellt am: 21.04.2004 :  19:35:34 Uhr  Profil anzeigen  Autor eine Email senden  Besuche pda-dev's Homepage  Sende pda-dev eine ICQ Message  Antwort mit Zitat
Da das FileDialog-Objekt nicht dazu geeignet ist, den Benutzer nur einen Ordner (nicht eine Datei) auswählen zu lassen, möchte ich hier kurz skizzieren, wie sich schnell ein eigener Ordnerauswahl-Dialog programmieren lässt. Kommentierter Quellcode des Ordnerauswahl-Dialoges (VB.NET)
Allgemeines
Der Dialog wird als eigenes Formular erstellt, das nachher modal angezeigt wird.
Zum Darstellen des PocketPC-Dateisystems wird ein TreeView verwendet. Zudem befindet sich eine ImageList auf dem Formular, die die Symbole für den geschlossenen und den offenen Ordner enthält. (Index 0: Ordner geschlossen, Index 1: Ordner offen)
Da wir nicht nach dem Aufruf des Dialogs eine halbe Stunde warten wollen, bis die gesamte Baumstruktur erstellt ist , werden die Unterordner nur dann geladen, wenn der Benutzer sie tatsächlich anfordert, indem er auf einen Ordner klickt.
Zudem soll unser DirDialog die Möglichkeit bieten, beim Aufruf schon in ein bestimmtes Verzeichnis zu springen. Dieses soll dann expandiert dargestellt werden, falls es überhaupt existiert. Wenn der Benutzer beim Aufruf keinen Pfad übergibt, werden wir nur das (aufgeklappte) Wurzelverzeichnis "\" anzeigen.
Der aktuell ausgewählte Pfad wird in einer TextBox dargestellt.
SelectedDir-Eigenschaft: Der aktuell gewählte Ordner
Über die Eigenschaft SelectedDir, welche ein DirectoryInfo-Objekt zurückliefert, lässt sich jederzeit auf den momentan ausgewählten Ordner zugreifen.
DirNode: Wir erweitern das TreeNode-Objekt
Um uns zu merken, welche Knoten(Ordner) schon besucht wurden (damit wir deren Unterordner nicht nochmal neu laden müssen), brauchen wir zu jedem TreeView-Knoten ein Flag, das "besucht" oder "nicht besucht" angibt. Natürlich eignet sich eine boolsche Variable dafür am besten. Folglich erstellen wir eine eigene Klasse "DirNode", die von TreeNode erbt und erweitern das TreeNode-Objekt so um die Eigenschaft "Visited" .
 
Public Class DirNode
Inherits TreeNode
Private blnIsVisited As Boolean = False
Property Visited() As Boolean
Get
Return blnIsVisited
End Get
Set(ByVal Value As Boolean)
blnIsVisited = Value
End Set
End Property
End Class
 
Die Knoten im Ordnerauswahl-TreeView werden nun keine TreeNode's mehr sein, sondern DirNode's
Laden der Ordner
Das Laden der Unterordner geschieht in der Prozedur "ListDirs", die einen Verweis auf das zu expandierende DirNode übergeben bekommt. Hier kommt die Visited-Eigenschaft zum Einsatz. Denn wenn der Knoten schon besucht wurde, so brauchen die Unterknoten (=Unterordner) nicht neu geladen zu werden. Falls der Order jedoch noch nie geöffnet wurde (also der Knoten unbesucht ist), so werden mittels GetDirectories alle Unterordner durchlaufen und jeweils ein neuer, untergeordneter DirNode hinzugefügt. Für jeden Unterordner wird zudem überprüft, ob er selbst wieder Unterordner hat. Das ist wichtig, denn falls ja, so müssen wir unter den Knoten für den Unterordner nochmals einen Knoten als "Dummy" einbauen, damit sich der Knoten für den Unterordner expandieren lässt Zuletzt markieren wir dann den soeben geöffneten Knoten als besucht.
Auswahl eines Ordners beim Aufruf
Um die Möglichkeit zu bieten, gleich beim Anzeigen des DirDialogs einen Ordner auszuwählen und expandiert darzustellen, wird einfach die Sub New überladen. Entweder sie wird ohne Parameter aufgerufen, dann wird nur das Wurzelverzeichnis dargestellt. Oder beim Instanziieren des DirDialogs wird ein Pfad übergeben, der angezeigt werden soll. Die Implemtierung hierfür wird an dieser Stelle nicht weiter ausgeführt, sie ist im Quellcode ausreichend kommentiert.
BeforeExpand-Ereignis des TreeView
Hier müssen wir abfangen, was passieren soll, wenn der Benutzer einen Listenknoten erweitert, also einen Ordner "öffnet": wir rufen die Prozedur zum Darstellen der Unterordner auf.
AfterSelect-Ereignis des TreeView
Nachdem ein Knoten (Ordner) ausgewählt wurde, aktualisieren wir die Pfad-Texbox und setzen einen Verweis auf den gewählten Ordner.
Aufruf des DirDialog
Wie bereits erwähnt wird der DirDialog als modales Forumlar gestartet. Angenommen in das Textfeld txtDir soll das "Ergebnis" der Ordnerauswahl übernommen werden. Dann erfolgt der Aufruf so:
 
Dim dlgDir As DirDialog
'es soll bereits der in txtDir angegebene Ordner angezeigt werden
dlgDir = New DirDialog(txtDir.Text)
'ODER
'es soll nach start nur das der inhalt des wurzelverzeichnis angezeigt werden
'dlgDir = New DirDialog()
If dlgDir.ShowDialog() = DialogResult.OK Then
txtDir.Text = dlgDir.SelectedDir.FullName
End If
 
Hinweis: Damit die Anzeige im TreeView während des Ladens der Unterordner nicht flackert, sollte .NET Compact Framework SP 2 installiert sein!

Ein Computer wird nie das tun, was du willst - sondern das, was du programmierst!
   
  Vorheriges Thema Thema   
Springe nach:
 
  Bookmark & Share  
 
 
 
  Tags  
   
 
 



pda-dev.de

Quicklinks: Foren-Übersicht | Developer-News | Suche | Impressum

© just-works! Software

Zum Anfang der Seite

Snitz Forums 2000