| 

.NET C# Java Javascript Exception

6
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.



----------------------------------
EDIT (Lösung!!!!):
------

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:
internal override void PopulateWithFileNames(Collection<string> names)
{
IShellItemArray resultsArray;
uint count;

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!
18.10.2011
Eiger 1,9k 2 9
Eiger 1,9k 2 9
2 Antworten
1
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?
18.10.2011
chriscolm 126 1 3
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...
Eiger 18.10.2011
0
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.
18.10.2011
chriscolm 126 1 3
Eben. Die weitere Verarbeitung bei FolderChanging wäre der Wechsel des Folders. Somit bedeutet e.Cancel == true, dass das Verzeichnis nicht gewechselt wird!
Eiger 18.10.2011
@chriscolm Bitte nutze für solche Erwiderungen die Kommentarfunktion zu Deiner ursprünglichen Antwort. Danke!
Matthias Hlawatsch 18.10.2011
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
Karl 20.10.2011
Genau so ist es! Mittlerweile bin ich in den Tiefen des CodePacks angelangt ;-). Bin um jede Hilfestellung froh...!
Eiger 20.10.2011
Lösung siehe oben in Originalfrage! ;-)
Eiger 20.10.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH