nippon-tussi
Goto Top

Winziges Problemchen mit FolderBrowserDialog

Ich möchte im Verzeichnisbaum ein Unterverzeichnis automatisch aufklappen lassen.

Nach Zuweisung eines Pfades an FolderBrowserDialog.SelectedPath zeigt der FolderBrowserDialog z.B.folgendes an:

03d79c7b5fbed98b694b2e18b02b2872

Wie man sieht, ist das vorher angegebene Verzeichnis korrekt selektiert (hier "B").

Ich möchte erreichen, dass der FolderBrowserDialog schon beim Aufruf von FolderBrowserDialog.ShowDialog(), also unmittelbar nach dem der FolderBrowserDialog auf dem Bildschirm angezeigt wird ohne Zutun des Benutzers (z.B. Cursor-rechts) auch die Unterverzeichnisse anzeigt.

Also so:

4eb4d1b745ee581b75290b6b3be8b2a9

Wie kann ich das erreichen?

Ein paar Google-Stichworte oder Codefetzen, egal in welcher Sprache, würden mir schon helfen.

Danke fürs lesen, Tussi

Content-ID: 174082

Url: https://administrator.de/contentid/174082

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

Logan000
Logan000 04.10.2011 um 08:36:13 Uhr
Goto Top
Moin Moin

Nach kurzen drüberschaun, würde ich sagen das wird nichts.
Die Klasse gibt sowas nicht her.

Gruß L.
colinardo
colinardo 04.10.2011 um 10:29:54 Uhr
Goto Top
Du könntest den Dialog per SendKeys-Methode steuern.
Folgendes kannst du mit einer Form testen auf dem ein Button den FolderBrowserDialog aufruft.
Funktionsweise: Der Timer sucht nach dem Start nach einem Fenster mit dem Titel "Ordner suchen", falls er es findet, sendet er Tastaturanschläge an den Dialog um den Ordner aufzuklappen.
   Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long  
    Private Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Integer  
    Dim WithEvents t1 As New Timer
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim fd As New FolderBrowserDialog
        t1.Interval = 200
        With fd
            .SelectedPath = "C:\Windows"  
            t1.Start()
            .ShowDialog()
            t1.Stop()
        End With
    End Sub

    Sub SendKeysToApplication(ByVal AppTitle As String, ByVal key As String)
        Dim hWnd As Long = FindWindow(Nothing, AppTitle)

        If hWnd <= 0 Then
            '*** TO DO *** Fenster existiert nicht  
        Else
            SetForegroundWindow(hWnd)
            SendKeys.SendWait(key)
            t1.Stop()
        End If

    End Sub

    Private Sub t1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles t1.Tick
        SendKeysToApplication("Ordner suchen", "{TAB}{TAB}{right}")  
    End Sub
nippon-tussi
nippon-tussi 04.10.2011 um 12:55:59 Uhr
Goto Top
Ja, mit Sendkeys geht es ganz gut. Nicht wirklich elegant, aber für meine Zwecke reicht es.

Da FolderBrowserDialog.Showdialog unmittelbar auf t1.Start folgt und somit der Dialog ohnehin den Fokus hat, habe ich auf SendKeystoApplication verzichtet und rufe Sendkeys.Sendwait direkt in t1_tick auf.

Danke für den Tipp!