Ich habe ein Fenster, das ich manchmal mit Show()
und manchmal mit ShowDialog()
öffne. Im zweiten Fall ist das zurückgegebene Dialog-Ergebnis für mich wichtig. Aber wenn ich DialogResult
nach Aufruf von Show()
setze, bekomme ich InvalidOperationException
. Gibt es eine Möglichkeit, herauszufinden, welche Methode zum Öffnen des Fensters verwendet wurde, und das DialogResult
entsprechend einzustellen oder nicht? Oder gibt es einen anderen Weg?
Natürlich weiß ich, dass ich die Ausnahme fangen und ignorieren kann, aber ich mag diese Lösung nicht.
Verwenden Sie System.Windows.Interop.ComponentDispatcher.IsThreadModal innerhalb des Fensters, um festzustellen, ob es in einem modalen Thread ausgeführt wird oder nicht.
Wenn Sie set_DialogResult in Reflector betrachten, überprüft es _showingAsDialog, um festzustellen, ob der Dialog modal ist. Leider ist dies ein privates Feld.
Konstruieren Sie vor dem Aufruf von Show () / ShowDialog () immer eine neue Instanz des Fensters. Wenn ja, könnten Sie dem Konstruktor ein Argument übergeben, das angibt, wie es angezeigt werden soll.
Sie können die Eigenschaft Form.Modal
verwenden, um die Art der Verwendung zu überprüfen.
Bei der Verwendung von Form.Show()
müssen Sie einen anderen Weg verwenden, um dem Aufrufer die Ergebnisse des Formulars mitzuteilen.
Gibt es einen Grund, beide Möglichkeiten des Formulars zu verwenden?
Wie wäre es, einfach dieses.DialogResult = DialogResult.blah im Formular-Closing-Event zu setzen?