Wie um zu überprüfen, ob Fenster wirklich sichtbar in Windows Forms?
Normalerweise verwenden Sie den Form.Sichtbar, um zu überprüfen, ob Fenster sichtbar sein. Aber manchmal auf dem Bildschirm-Fenster unter anderen Fenstern, so dass es wirklich unsichtbar.
So, wie die check-in-c# - Windows Forms-wenn die Fenster wirklich sichtbar oder nicht?
Möchte ich, um dies zu erreichen: wenn ich auf STRG+K " auf meiner Tastatur und mein Fenster ist sichtbar auf meinem Bildschirm, es tut sich nix. Aber wenn es unter anderen windows-es erscheint, in den Vordergrund (Bring to front).
freundlichen GRÜßEN
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie rufen Sie die
Aktivieren
Methode auf die form zu bringen, um es an die front, wenn Sie nicht bereits.Beachten Sie jedoch, dass wenn ein anderes Programm aktiv ist, wird es in der Regel einfach flash die Schaltfläche desktop (je nachdem, wo Sie es aufrufen). Das ist Windows' standard-Schutz gegen focus-stealing und Sie man sollte nicht versuchen, das zu umgehen.
Googelte ich durch das web, aber es hätte nicht gerade die Antwort, um zu sehen, wenn ein Teil eines Fensters ist der wirklich für den Benutzer sichtbar. Habe ich eigentlich brauchte einen Weg, um "hittest" der form, wenn die Maus derzeit auf der Oberseite des sichtbaren Teils des Fensters. Ich dachte, ich würde teilen die code, die dauerte mehrere Tage, zu erreichen:
Könnten Sie Windows-API zum auflisten aller Fenster, abrufen Ihrer Z-Reihenfolge und vergleichen Sie Sie mit der Z-Reihenfolge der Fenster. Ich glaube, jemand hat diese schon hier.
Antwort auf die Frage gebeten, die Sie könnten versuchen, den Aufruf der
WindowFromPoint
API-Funktion zu finden, die Fenster, die an verschiedenen stellen auf dem Formular, und prüfen Sie, ob es gibt das handle, was Sie erwarten, zu sein an diesem Punkt.Hm... seltsame Frage. 😛
Vielleicht könnten Sie bitten, den Speicherort des forms, und wenn zwei Formen interlap (Abbildung aus Ihren coords, und machen eine einfache Methode) prüfen Sie, ob ein Formular den Fokus hat(). Wenn es den Fokus hat, dann muss Sie "unsichtbar" (in dem Sinne, dass ein Benutzer nicht sehen können, weil es unter die andere form).
Offensichtlich diese Methode ist hacky am besten, aber es ist etwas, Sie können anfangen zu arbeiten mit.
Du sicherlich auch.. 🙂 Holen Sie sich die ClickablePoint Eigenschaft aus der AutomationElement entsprechende Fenster.
Ich bin mir nicht 100%ly sicher, ob das ganz korrekt ist, aber.. es hat in 99% der Fälle für mich und ich bin immer noch die überprüfung auf das andere 1%, wo das problem liegt (vielleicht auf meiner Seite oder schlechte handling für den Bediener, oder.)
Ich aktually implementieren versucht SLaks Vorschlag. Obwohl ich schrieb es in VB.NET nicht C#
Sollten Sie in der Lage sein, um herauszufinden, ob Ihre Fenster sichtbar ist, durch überschreiben der OnPaint-Methode. Sie wollen die Kontrolle an der Basis-Klasse in Auftrag, um die eigentliche Malerei, aber Sie werden in der Lage sein zu erkennen, ob eine paint-Nachricht empfangen wird.
Update: Nein, das funktioniert nicht, Sorry!
Im Prinzip die Activate-Methode bringen Sie Ihre Fenster in den Vordergrund, aber in der Praxis habe ich immer gefunden, diese problematische, wenn andere Prozesse haben den Eingabe-Fokus. Wenn Sie wirklich wollen, dass jemand zu sehen, ein Fenster, legen Sie das oberste bit, aber erwarten, dass Sie zu ärgern! Eine todsichere Weg, um einige Aufmerksamkeit für ein Fenster, um es zu schließen und öffnen Sie es erneut, wenn Sie Weg erhalten können mit.
Einen Weg, das zu erreichen, was Sie suchen, ist die Verwendung einer notify-Symbol, diese erhalten die Aufmerksamkeit des Benutzers in einer Weise, die kompatibel mit Windows-UI-Richtlinien.
Einfach die
Form.AlwaysOnTop
Eigenschafttrue
.