FolderBrowserDialog im Stil eines OpenFileDialogs

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von Picknicker93.

    FolderBrowserDialog im Stil eines OpenFileDialogs

    Hallo Forum,

    Ich schreibe gerade an einer kleinen Windows-Anwendung.
    In dieser Anwendung lege ich ein paar Pfade fest.

    Es funktioniert soweit alles super, aber ich möchte eine Sache umbauen.

    Ich arbeite da mit 2 Buttons. Mit dem ersten öffne ich einen OpenFileDialog und wähle eine Datei aus und speicher mir den Pfad in eine Variable.
    Mit dem Zweiten möchte ich einen zweiten Pfad in eine andere Variable schreiben. In diesen Pfad soll die gewählte Datei verschoben werden.
    Aber ich persönlich finde den FolderBrowserDialog zu unpraktisch, weil ich mit InitialDirectotries arbeite.

    Stattdessen arbeite ich auch da mit einem OpenFileDialog, muss aber eine Datei in dem Ordner auswählen um den Pfad zu bekommen.

    Meine Frage ist also, wie kann ich einem OpenFileDialog die Funktion geben nur den Ordner auswählen zu können?

    Vielen Dank schonmal!

    Picknicker93
    So einfach wirst du das nicht anstellen können, da das Objekt ja im Prinzip fest festgelegt ist. Aber:
    Du kannst jedes Objekt in einer neuen Klasse editieren. Einfach das originale erben lassen und dann so verändern, wie du es brauchst.
    Du kannst es auch mit einem Code machen, wie kann ich dir jetzt allerdings nicht sagen.
    Der Vorteil ist, dass du das Objekt dann in der Toolbox für die Zukunft behalten kannst.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „programmer71“ ()

    Direkt geht das meines Wissens nach nicht, aber du kannst den openfiledialog aus dem Vista-controls Pack nehmen, der sieht so aus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nafets3646“ ()

    Hey, Danke für die fixen Antworten :)

    @programmer71: Was genau meinst du damit?
    Ich hatte vorhin die Antwort von dir gesehen mit dem eigenen Dialog und Klassenvererbung. Ich denke dieser Weg wäre für mich denkbar. Nur habe ich das noch nicht gemacht und würde da ein bisschen Erklärung zu brauchen.

    @xtts02: Genau so möchte ich es ja nicht machen. Die SpecialFolder des FolderBrowserDialog sind nicht ausreichend für meine Vorauswahl. Ich bin da in den Ordnern eines Programms unterwegs.

    @nafets3646: Wie komme ich daran und kann man da auch nur den Ordner mitauswählen?

    Picknicker93
    Aber war das dabei dann nicht so, dass der Ordnerbaum quasi über dem ausgewählten
    Pfad "abgeschnitten" würden. Dann könnte ich ja nicht mehr auf die Ordner darüber
    zugreifen.
    Diese Flexibilität würde ich aber schon gerne haben.
    Also du kannst jedes Objekt der Toolbox in einer neuen Klassen editieren, indem du das Standardobjekt erben lässt. Dann kannst du dieses editieren und so verändern wie du willst und es dann abspeichern in der Toolbox.

    Sprich du deklarierst etwas neues und schreibst dann:

    VB.NET-Quellcode

    1. Inherits OpenFileDialog



    Dann hast du die Standard-Einstellungen für das Objekt und kannst diese nach Bedarf abändern.
    Ob das so funktioniert kann ich dir nicht garantieren, da das schon sehr weit in die Funktionen geht, aber ein Versuch ist es wert.


    Hier das Ganze anhand eines TabControls. Nur dass du siehst wie sowas dann anfangs ungefähr ausschaut. social.msdn.microsoft.com/Foru…a-4221-b3c9-fe6e1e1dcfc6/
    :thumbsup:

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „programmer71“ ()

    @xtts02: Ich habe glaube ich ein Problem beim übergeben des Pfads an den Dialog. Ich habe den Pfad (C:/Program Files (x86)/.../Neu/) in einer Variable. Ist glaube ich nicht das richtige Format für den Dialog oder?

    @programmer71: Ich werd mein Glück mal versuchen :)
    Meine IntelliSense sagt mir dass OpneFileDialog 'not inheritable' ist. Das funktioniert also doch nicht oder?
    Mit diesem Button öffne ich den Dialog und möchte einen Ordner wählen.

    VB.NET-Quellcode

    1. Private Sub btnTarget_Click_1(sender As Object, e As EventArgs) Handles btnTarget.Click
    2. Try sSavePath = Nothing
    3. Using folderbrowser As New FolderBrowserDialog()
    4. If rbnMapPlayed.Checked = True And rbnNewMap.Checked = False Then
    5. folderbrowser.SelectedPath = Environment.GetFolderPath(sInitDirectPlayed)
    6. Else
    7. folderbrowser.SelectedPath = Environment.GetFolderPath(sInitDirectNewMaps)
    8. End If
    9. If folderbrowser.ShowDialog() = Windows.Forms.DialogResult.OK Then
    10. sSavePath = System.IO.Path.GetDirectoryName(folderbrowser.SelectedPath)
    11. lblTargetPath.Text = sSavePath
    12. End If
    13. End Using


    Über diesen Textbox-Doppelklick lasse ich den Benutzer Standardpfade auswählen:

    VB.NET-Quellcode

    1. Private Sub tbxPathJustPlayed_DoubleClick(sender As Object, e As EventArgs) Handles tbxPathJustPlayed.DoubleClick
    2. Try
    3. Dim FolderSelect As New FolderBrowserDialog()
    4. If FolderSelect.ShowDialog() = Windows.Forms.DialogResult.OK Then
    5. tbxPathJustPlayed.Text = FolderSelect.SelectedPath + "\"
    6. End If
    7. Catch ex As Exception
    8. MsgBox(ex.ToString)
    9. End Try
    10. End Sub
    Aaaahhh! :D
    Ja so funktioniert das schonmal. Aber jetzt wähle ich in dem Ordner einen ordner aus in den die Datei rein soll. Aber die Datei wird dann in den übergeordnten Ordner verschoben.

    Ich probier dann auch mal den VistaDialog aus, der wäre vom design so wie ich das haben will. hoffentlich funktioniert der auch so wie ich das will :D

    EDIT:
    Jetzt wo ich mir das auf der Seite die @nafets3646 gepostet hat, so angucke hab ich einen Gedanken. Da werden 2 verschiedene FolderBrowserDialogs gezeigt.
    Der eine ist ".NET Framework Controls running under Vista" und der andere "Vista Controls running under Vista".
    Der erste sieht genau so wie mein jetziger Dialog aus, der zweite ist der den ich haben möchte.
    Kann ich dem Dialog irgendwie mitgeben ob er die .NET Framework Controls benutzen soll oder die Vista Controls?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Picknicker93“ ()

    Nur zur Ergänzung: Für die in Vista neu eingeführte Version des Dialogs kannst du das COM interface IFileOpenDialog verwenden. Siehe hier:
    msdn.microsoft.com/de-de/libra…op/bb775834(v=vs.85).aspx
    pinvoke.net/default.aspx/Interfaces/IFileOpenDialog.html

    Als Option muss, um Ordner statt Dateien wählen zu können, FOS_PICKFOLDERS festgelegt werden.
    Das ist natürlich nur ab Vista möglich. In früheren Versionen kannst du aber einfach auf den normalen FolderBrowserDialog ausweichen.
    @Picknicker93
    Zu deiner Frage:
    Das Bild zeigt ja 3 FolderBrowserDialogs.
    1. Vista Controls running under XP: So sieht der FolderBrowserDialog unter Windows XP aus, es ist also der gleiche wie der Standart unter XP
    2. .NET Framework Controls running under Vista: So sieht es normalerweise unter Windows Vista/7 aus.
    3. Vista Controls running under Vista: So sieht der FolderBrowserDialog unter Windows Vista/7 aus. Das ist der Dialog, den du willst