C# "FolderBrowserDialog" mit Pfadeingabe

AP Nova

Commander
Registriert
Juni 2008
Beiträge
2.256
So langsam kommt es mir zwar blöd vor, "so viele" Threads für meine Problemchen zu erstellen, aber da ich sonst keine Lösung finde, führt da wohl kein Weg drum rum.

Gibt es einen vorgefertigten Dialog, der wie ein FolderBrowserDialog funktioniert (-> Grafische Auswahl eines Ordners), es dabei aber zulässt, den jeweiligen Pfad noch im Dialog selbst zu sehen und verändern? Entweder mit der gewohnten Baumstruktur aus dem FolderBrowserDialog oder eher in Richtung (Open-/Save-)FileDialog, nur eben dass man Ordner statt Dateien auswählt.

So wie es aussieht, kann man weder die FileDialog-, noch die FolderBrowserDialog-Klasse erben und so selbst entsprechend anpassen.

Müsste man hier also auf eine eigene Lösung zurückgreifen oder gibt es da doch etwas Vorgefertigtes, das man verwenden oder zumindest modifzieren kann?

(Konkret geht es mir dabei darum, auch versteckte Ordner erreichbar zu machen, die man im gewöhnlichen FolderBrowserDialog nicht erreichen kann. Eine eigene Lösung hätte sicher den Vorteil, dass man versteckte Ordner auch im UI darstellen könnte und nicht nur "raten" müsste, wie die heißen.)

Danke für eure Hilfe
 
OpenFileDialog? ;)

//kalleberlin
 
Dazu solltest du dich mit deinem aktuellen GUI beschäftigen. Die Lösung, die ich wählen würde, ist, schon den Standard FolderBrowserDialog zu verwenden, aber ihn zu erweitern, um das, was du brauchst.

Das ist sehr lehrreich, nur muss man sich dazu in die GUI-einlesen. Es gibt ja verschiedene Komponenten eines sichtbaren Fensters, das oberste ist meistens "Window", das darunter "Container" und dann "Component". Was du brauchst, ist ein Component-Textfeld, dass du in den Container einbaust.

Sorry, ich hab das für Java mal gemacht, für C# weiß ich es grad leider nicht auswendig. Es ist an sich nicht viel Code, vielleicht ca 15-20 Zeilen, wenn man es richtig macht. Du musst nur den FolderBrowserDialog erzeugen und dann modifizieren, bevor du ihn anzeigen lässt. Alternativ, wenn das nicht geht, musst du ein eigenes Windows und einen eigenen Container erzeugen, und dort hinein den Inhalt des FolderBrowserDialogs laden. Irgendwie so.

Immer schön an die Microsoft DN halten:
http://msdn.microsoft.com/de-de/library/system.windows.forms.commondialog.aspx
http://msdn.microsoft.com/de-de/library/system.windows.forms.folderbrowserdialog.aspx
etc.
Aber hast du ja wahrscheinlich schon gewusst.
 
@F_GXdx:
So wie es aussieht, kann man weder die FileDialog-, noch die FolderBrowserDialog-Klasse erben und so selbst entsprechend anpassen.

@kalleberlin: Nur möchte ich damit Ordner auswählen, keine Dateien, deswegen scheidet der OpenFileDialog aus.

Dann muss ich wohl auf eine eigene Lösung zurückgreifen.
 
Mit WPF scheint es zu funktionieren, mit WindowsForms nicht (ohne Umwege), ich nehme an, du verwendest letzteres? Was für eine IDE verwendest du denn? Wenn es wirklich nicht geht, würde ich es mit dem GUI Designer selbst bauen. Ich habe zwar eine Anleitung ergoogelt, die es mit einem P/Invoke löst, aber das würde ich nicht machen.

WinForms:
http://www.codeproject.com/KB/dialog/CustomizeFileDialog.aspx
WPF:
http://www.codeproject.com/KB/dialog/WPFCustomFileDialog.aspx

Ich muss sagen, das ist in C# echt schwach gelöst, in Java gibt es da viel bessere Möglichkeiten.
 
Zuletzt bearbeitet:
Ich arbeite mit Windows Forms. Mittlerweile habe ich das Grundgerüst für eine eigene Lösung auch schon mehr oder weniger stehen, nur jetzt stehe ich vor einem Problem:
Wie sorge ich dafür, dass nur dieses Fenster Anweisungen entgegennimmt, solange es geöffnet ist und nicht mehr die eigentliche Form des Programms und wie regle ich das mit den Rückgabewerten?

Angelehnt an die anderen Dialoge müsste das ja in etwa so aussehen:
1. Öffnen, nur noch im Dialog Eingaben akzeptieren
2. Auswählen des Ordners/der Datei
3. Bestätigen oder Abbrechen und dabei den Rückgabewert liefern

Aber müsste das dann nicht im Programmcode so umgesetzt werden, dass die "ShowDialog"-Methode mittendrin "aufhört", bis der 2. Schritt beendet wurde und erst dann an derselben Stelle weitermacht, um den Rückgabewert zu liefern? Also praktisch so:

ShowDialog()
{
//Anzeigen des Dialogs
//"Pause" für den 2. Schritt
return result;
}

Wie setzt man so etwas um?

edit: Lösung gefunden und wirklich sehr einfach: Form enthält unter Anderem die Methode "ShowDialog" standardmäßig. Diese muss man nicht einmal modifizieren oder erwähnen, man muss lediglich den gewünschten Buttons (ob es mit anderen Steuerelementen auch ohne Umwege geht, weiß ich nicht) die Eigenschaft "DialogResult" zuweisen. Klickt man dann auf den Button, schließt sich der Dialog automatisch mit Rückgabewert. Der Aufruf erfolgt dann wie bei den anderen Dialogen auch über "myForm.ShowDialog();", dann wird genau das gewünschte Verhalten gezeigt.
 
Zuletzt bearbeitet:

Ähnliche Themen

Antworten
21
Aufrufe
2.378
Zurück
Oben