Anpassen Speichern Sie den Dateidialog so, dass er dem zugrunde liegenden Betriebssystem-Speicherdialog ähnelt C #

8

Ich habe dieses Beispiel verwendet, um den Speicherdialog anzupassen,

Ссылка

Das funktioniert gut und ich könnte den Dialog auch anpassen. Ich sehe jedoch, dass der benutzerdefinierte Dialog nicht dem zugrunde liegenden Windows-Stil folgt. Zum Beispiel, wenn ich in Windows 7 bin, würde der Dialog so aussehen,

Dies ist ein Dialog zum Speichern von Wörtern und es hat nur wenige Optionen wie Tags und ähnliches. Das Aussehen und Verhalten entspricht jedoch dem Dialogfeld zum Speichern von Betriebssystemen. Der benutzerdefinierte Speicherdialog mit dem oben genannten Link würde jedoch folgendermaßen aussehen:

Warum sollte es nicht folgen, was OS bietet? Gibt es eine Möglichkeit, damit umzugehen?

Ok, ich habe ein bisschen recherchiert und bin an den Punkt gekommen, an dem ich CommonSaveFileDialog von Microsoft.WindowsAPICodePack.Dialogs verwenden und den darunterliegenden Save-Dialog erstellen kann (der mit Windows 7 Style übereinstimmt). Ich habe das WindowsAPI-Shell-Paket installiert und das CommonSaveFileDialog-Steuerelement verwendet, um so etwas zu erstellen,

Die rot markierten Steuerelemente sind tatsächlich CommonFileDialogLabel / CommonFileDialogTextBox / CommonFileDialogComboBox usw., die in dieser API bereitgestellt werden. Aber jetzt ist meine Frage, wie füge ich ein Benutzersteuerelement / ein benutzerdefiniertes Steuerelement hinzu? Ich brauche die volle Kontrolle darüber, was ich hinzufüge, damit es eine Benutzerkontrolle sein kann. Irgendeine Idee .. Bitte helfen Sie Danke.

    
user1821499 24.06.2015, 20:20
quelle

1 Antwort

6

Die vorgeschlagene Lösung funktioniert wie beschrieben:

Der Dialog "Speichern unter" (in diesem Beispiel verwendet) ist mit einem Benutzersteuerelement namens "CustomSaveFileDialog" verknüpft. Es hat den Vorteil, dass es in der Toolbox vorhanden ist und die IDisposable-Schnittstelle automatisch implementiert. Es könnte jedoch auch eine einfache C # -Klasse gewesen sein.

Dieses Steuerelement verfügt über einen Konstruktor, der ein beliebiges anwendungsspezifisches Benutzersteuerelement akzeptiert, das alle Elemente hostet, die im Dateidialog angezeigt werden sollen. Wenn ich die Frage richtig verstanden habe, ist das erforderlich.

Der CustomSaveFileDialog hat die folgenden Eigenschaften:

  • Akzeptieren von willkürlichen Steuerelementen, die an den unteren Rand der Datei angedockt sind Dialog, d. H. Sie folgen der Größenanpassung des Dateidialogs
  • Kein besonderes Verhalten für die zusätzlichen Elemente (Buttons, Bilder, Checkboxen usw.) ist notwendig. Sie verhalten sich ganz normal wie in anderen Windows.

Dies ist der Code der beschriebenen Klasse:

%Vor%

Der wesentliche Teil ist das Einhaken der Windows Events. Dies wurde aus diesem Beitrag übernommen.

Es ist anzumerken, dass die "FindWindowEx" -Funktion (in WinEventProc) alle allgemeinen Dialoge (und wahrscheinlich mehr) mit dem Titel "Save As" findet. Wenn dies ein Problem sein sollte, wäre mehr Filterung erforderlich, z. B. indem nur im aktuellen Thread gesucht wird. Eine solche Suchfunktion finden Sie hier .

Zusätzlich (nicht im obigen Code gezeigt) enthält die Methode "Dispose" in CustormSaveFileDialog.desinger.cs die Unhook-Funktion mit dem hHook-Handle als Parameter.

Die Software wurde in Windows7 im Debug-Modus getestet. Als Test wurde ein einfaches Formularfenster mit einer Schaltfläche implementiert:

%Vor%

Und - neben einem Test - behandelt das applikationsspezifische Benutzersteuerelement die folgenden Ereignisse:

%Vor%

Die folgende Ausgabe wird erzeugt:

Das nächste Bild zeigt einen weiteren Screenshot, die Größe des Dateidialogs wurde geändert und das Kontrollkästchen zum Anzeigen des Bildes ist deaktiviert.

    
josh 28.06.2015, 01:12
quelle

Tags und Links