2010-03-29 4 views
6

Ich möchte eine Funktion in meiner Anwendung implementieren, wo ein Dialogfeld für den Benutzer und das Hauptformular (similar to how jQuery looks) anzeigen. Meine einzige Idee ist, einen Screenshot des Formulars zu machen, es als Hintergrund eines Panels (mit Deckkraft nach meinem Geschmack) zu platzieren und dann das Panel über alles auf dem Formular zu schieben. Ich muss glauben, dass es einen besseren Weg gibt, irgendwelche Vorschläge zu machen?Was ist der beste Weg, den Hintergrund von Winform beim Anzeigen eines Dialogs zu "dimmen"?

Antwort

11

Die Opacity-Eigenschaft ist, was Sie brauchen, um ein Formular zu "dimmen". Sie müssen ein Overlay erstellen, mein Code in this thread zeigt, wie dies zu tun ist.

Achten Sie darauf, dass Ihr Programm keine UAC-Eingabeaufforderung anzeigt. Obwohl es in Browsern vielleicht angebracht ist, wird der Benutzer niemals Schwierigkeiten haben zu erkennen, dass ein Fenster, das von einem Dialog überlagert ist, deaktiviert ist. Controls malen sich anders aus, um es deutlich zu machen.

+1

+1: Dies ist ein einfacher Ansatz als ich, da es nicht Subklassifizieren Kontrollen erfordert. –

+3

Sehr schöne Lösung. Obwohl ich sagen muss "der Benutzer wird niemals Probleme haben zu erkennen, dass ein Fenster, das von einem Dialog überlagert ist, deaktiviert ist", kann manchen Benutzern zu viel Kredit geben. ;) – stout

+0

Tolle Lösung. Aber auf einer negativen Seite, da ein zusätzliches Formular dem vorhandenen Formular überlagert ist, kann der Fokus entweder auf dem Overlay-Formular oder dem Elternformular sein. Das ist nicht ideal. Ich meine, es scheint nicht, als hätte sich eine Überlagerung über die bestehende Form gebildet, aber zwei Formen sind geöffnet. Kann es irgendeine Logik geben, um es ideal zu machen? – nawfal

2

Warum sollte nicht einfach die Deckkraft auf 50% des übergeordneten Fensters eingestellt werden, kurz bevor das modale Dialogfeld gestartet wird, und zurück auf 100%, wenn das modale Dialogfeld geschlossen wird? Dies ist nicht genau das, wonach Sie fragen, dient die gleiche Funktion für den Endbenutzer.

Wenn Sie etwas wie Ihr JQuery-Beispiel tun möchten, müssten Sie in der Tat den Bildschirm Cap/Augment/Set als Hintergrund Idee, die Sie beschrieben haben.

0

Ich weiß, das ist ein alter Thread, aber wenn Sie noch interessiert sind, können Sie sich dieses Projekt ansehen.

Download Project

Verwandte Themen