Servus zusammen, ich habe einen CommonOpenFileDialog aus dem WindowsAPICodePack. Diesen benutze ich als FolderOpenDialog. Nun will ich erreichen, dass bei einem Doppelklick auf ein Verzeichnis mit einem bestimmten Namen, der Dialog geschlossen wird, wie wenn der Benutzer OK gedrückt hätte. Hierzu fange ich das FolderChanging Event ab, so z.B.:
void opendialog_FolderChanging(object sender, CommonFileDialogFolderChangeEventArgs e) { if (e.Folder.Contains("blabla")) { //return with Result OK... } }
... Und jetzt kommt ihr! Wie kann ich das erreichen? Ich komm hier nicht weiter, ausser dass ich die Anwendung per Process.Kill abschiesse ;-), aber das solls nicht sein.
Finally, nachdem man auf seine eigene Frage nicht antworten kann, werde ich die Lösung hier präsentieren. Ich habe im CommonOpenFileDialog im Shell-namespace nun eine DoClose()-Methode angelegt, sieht so aus:
public void DoClose() { forcedExit = true; int hr = 1; openDialogCoClass.Close(hr);
return;
}
Das flag forcedExit verhindert, dass beim Schliessen des nativen Base-Dialogs irgendwelche Parameter abgeholt werden, z.B. so:
if(!forcedExit) { openDialogCoClass.GetResults(out resultsArray); resultsArray.GetCount(out count); names.Clear(); for (int i = 0; i < count; i++) { names.Add(GetFileNameFromShellItem(GetShellItemAt(resultsArray, i))); } } }
Der Rest ist wie oben beschrieben. Ich fange den FolderChanging-Event ab und rufe dort das DoClose() auf... Et voilà ;-) ! Danke dennoch an alle, die sich Gedanken gemacht haben!
FolderChanging klingt, als könne man das Ereignis noch abbrechen. Möglicherweise gibt es ein e.Handled- oder e.Cancel-Property, das auf den passenden Wert gesetzt werden müsste. Oder aber das Event ist nicht das richtige für Deine Zwecke, gibt es ein FolderChanged-Event?
Na ja schon. Aber e.Cancel bedeutet ja dann nur, dass das Folder nicht gewechselt wird. Das ist ja nicht das Resultat, das ich haben will. Ich will in diesem Event den Dialog beenden...
nein, e.Cancel bedeutet dann auch, dass die weitere Verarbeitung unterbrochen wird. Bei einem Fenster (Win Forms oder WPF oder auch Delphi (VCL) ) wird der Befehl zum Schließen von den Ereignissen Closing und Closed "begleitet". Wenn jetzt e.Cancel == true, dann wird das Schließen des Fensters abgebrochen.
Eben. Die weitere Verarbeitung bei FolderChanging wäre der Wechsel des Folders. Somit bedeutet e.Cancel == true, dass das Verzeichnis nicht gewechselt wird!
Moin zusammen, ich glaube hier liegt ein Missverständnis vor. Eiger hätte gerne, das der Dialog mit DialogResult.OK geschlossen wird, wenn ein bestimmtes Verzeichnis angewählt wird. Das Propertiy "FileName(s)" soll dann entsprechend gesetzt sein. Vermutlich reicht opendialog.Dispose() dazu nicht aus. Mangels Vista/W7 kann ich es (hier) nicht testen. Gruß Karl