Frage

Meine OpenFileDialog hat eine einzige Filter, die auch die DefaultExt ist. Ich frage mich, warum, wenn der Dialog öffnet, erhalte ich auch all Internet-Shortcuts aufgeführt (es OK ist, um die Verknüpfungen zu Ordnern zu erhalten, zum Beispiel, aber nicht die * .URL-Dateien).

Gibt es einen magischen Schalter, die ich um netto einschalten kann sie in der den Benutzer angezeigt Liste aufgenommen werden?

Derzeit habe ich den Zustand, in dem FileOk Ereignishandler zu handhaben durch e.Cancel Einstellung true, wenn ich feststellen, dass der Benutzer eine *.URL Datei ausgewählt (es entweder nicht funktioniert 100% der Zeit ist, scheinen einige Abkürzungen noch zu bekommen durch die FileOk Filter). Nicht sich an erster Stelle in der Liste immer besser wäre, wenn.

War es hilfreich?

Lösung

Sie richtig sind, dass Open File gemeinsame Dialoge zeigen Windows Internet Shortcuts zusammen mit Ordnern. Ich habe keine Ahnung, warum dieses Verhalten existiert, aber es ist Hin- und Her- es geschieht in Win32 (versuchen Sie den Editor zu überprüfen) sowie WinForms-Anwendungen.

Es gibt einen Weg, dies zu umgehen, aber Warnung: es ist Hacky! Wenn Sie eine benutzerdefinierte Datei-Dialog-Klasse aus dem File-Dialog-Klasse abgeleitet sind, haben Sie Zugriff auf einige geschützte Ereignisse, die Sie jeden Aspekt des File-Dialog Operation anpassen können.

Dino Esposito schrieb einen MSDN Magazin-Artikel im November 2003, das zeigt, wie diese Technik funktioniert. Dieser Artikel ist nicht mehr auf der MSDN-Website, aber Sie können es auf der Wayback Maschine Archiv bekommen hier: http://web.archive.org/web/20150117123625/http://msdn.microsoft.com/en-us/magazine/cc300434.aspx .

Was würden Sie wahrscheinlich tun müssen, ist, Haken oder die WndProc des Dateidialog Unterklasse, die Datei manuell Listensteuerung durchschauen, Beiträge aus, Verknüpfungen waren, und Windows-Meldungen in die Dateiliste Steuerung zu senden, diese Elemente zu entfernen . Dann müssen Sie für Auffrischungen dieser Liste (zum Beispiel aus einem Verzeichnis ändern), und wiederholen Sie den Filtervorgang zu beobachten.

Dies wäre ein großer Hack, aber es ist möglich.

Wenn dies zu viel Arbeit oder die hackiness ist zu viel, würde ich vorschlagen, nur die FileOk Veranstaltung mit den Benutzern zu verhindern, dass eine Verknüpfung der Auswahl von Cancel=true von Ihrem CancelEventHandler für das FileOk Ereignis zurück.

Andere Tipps

Annoying. Sie können sie Whack durch einen Handler für das Ereignis FileOk Implementierung so dass der Benutzer nie eine auswählen können:

private void openFileDialog1_FileOk(object sender, CancelEventArgs e) {
  string ext = System.IO.Path.GetExtension(openFileDialog1.FileName);
  if (String.Compare(ext, ".url", true) == 0) e.Cancel = true;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top