Gibt es eine Möglichkeit, ein Fenster inaktiv zu halten, selbst wenn es den Fokus enthält? Ich habe zwei Formen (A und B). Nachdem der Benutzer mit A interagiert hat, übertrage ich den Fokus zurück auf B. Das Ergebnis der Fokusübertragungen (der Benutzer klickt auf das A und der Fokus zurück zu B) ist, dass Form A von aktiv zu inaktiv blinkt. Das sieht hässlich aus (besonders auf Vista, wo A momentan einen größeren Schatten bekommt). Wie kann ich A inaktiv bleiben lassen, damit dieses Blinzeln nicht passiert?Fenster inaktiv bleiben, selbst wenn aktiviert
Antwort
Endlich fand ich die Antwort!
WARNUNG: NICHT die Technik dieser Antwort missbrauchen. Dies wird Ihre Benutzer verwirren und das Computererlebnis im Allgemeinen beeinträchtigen. Die unten beschriebene Technik kann unter bestimmten Umständen sehr nützlich sein (z. B. Implementieren von IntelliSense-ähnlichem Verhalten), aber bitte sollten Sie bei Ihrer Verwendung vernünftig sein.
Die Nachricht WM_NCACTIVATE wird an ein Fenster gesendet, um den Status des Nicht-Client-Bereichs (d. H. Rahmen und Titelleiste) in inaktiv oder aktiv zu ändern. Der wParam der Nachricht zeigt an, ob der Status inaktiv oder aktiv ist. Wenn das wParam wahr ist (ein Wert von 1), wird das Fenster aktiv angezeigt. Wenn wParam falsch ist (ein Wert von 0), wird das Fenster inaktiv angezeigt. Um zu erzwingen, dass ein Fenster entweder inaktiv oder aktiv bleibt, überschreiben Sie das wParam, indem Sie es auf den entsprechenden Wert (0 oder 1) setzen, und Sie sind fertig!
private const int WM_NCACTIVATE = 0x0086;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCACTIVATE)
{
// Use this to make it always look inactive:
m.WParam = (IntPtr)0;
// Alternately, use this to make it always look active:
m.WParam = (IntPtr)1;
}
base.WndProc(ref m);
}
Sie sprechen über das Ändern eines Standardverhaltens eines GUI-Modells. Ich würde es nicht empfehlen. Wenn der Benutzer etwas auf A macht, sollte das Zurückkehren zu B nicht verschwinden. Warum blinkt es? Es sollte ein einzelner Schalter sein, wenn die Fokusänderung stattfindet.
konnte nicht sagen, was Sie beschreiben, ist der Fokus Schalt wie:
A-> B
B-> A> Benutzer Klick-> B
B-> A
?
Nicht sicher, ob dies hilft, aber Winforms unterstützt das Konzept der eigenen Formulare. Zum Beispiel, obwohl schwebende Symbolleisten außerhalb eines Top-Level-Fensters leben, bleiben sie aktiv, selbst wenn das Top-Level-Fenster aktiv ist (und umgekehrt). Ebenso möchten Sie, dass der Benutzer in der Lage ist, mit Ihrem Formular A zu interagieren, ohne Formular B zu deaktivieren.
Um dies zu erreichen, klingt es so, als müssten Sie b.AddOwnedForm(a)
anrufen, kurz bevor Sie a
anzeigen.
Ich habe Ihren Vorschlag ausprobiert, aber der Fokuswechsel zwischen dem Eigen- und dem Elternfenster verändert das Aussehen der Fenster leider immer noch von inaktiv zu aktiv. –
- 1. Stop-Update wenn Inaktiv
- 2. So erkennen Sie, wenn Windows inaktiv ist
- 3. Python aktiviert GDB für Fenster
- 4. Dynamisch Textfeld zu Fenster hinzufügen, wenn das Kontrollkästchen aktiviert ist
- 5. Wie aktualisiert CursorLoader automatisch die Ansicht, selbst wenn die App inaktiv ist?
- 6. Hyperlinks bleiben nach der Einstellung inaktiv iseEnabled = true zum übergeordneten Steuerelement
- 7. MSDeploy, wenn der IIS-Anwendungspool inaktiv ist
- 8. Mauszeiger ausblenden, wenn inaktiv (mit jQuery)
- 9. Sitzungssitzung bei Fenster schließen, wenn die Einstellung "Fortfahren, wo Sie aufgehört haben" in Chrom aktiviert ist
- 10. Wie aktiviert man ein Fenster in Java?
- 11. Form.ShowDialog() nicht Fenster angezeigt mit Debuggen aktiviert
- 12. Warum die Kontrollkästchen beim Scrollen mit flex nicht aktiviert bleiben?
- 13. Machen Sie die ausgewählte Registerkarte aktiv und bleiben inaktiv mit reinem Javascript nicht jquery
- 14. Wie kann ich meinen Dropdown-Link blau bleiben lassen, wenn er aktiviert ist?
- 15. Javascript aktiviert Eingabetyp, wenn Checkbox aktiviert und deaktiviert, wenn Checkbox
- 16. Ein Fenster an sich selbst binden?
- 17. Anwendung bleiben offen, wenn Owner.Show() für Hauptformular
- 18. Datenbindung aktiviert wenn falsch
- 19. C# Checkedlistbox wenn aktiviert
- 20. Warnung, wenn die Bedingung nicht erfüllt sollte im gleichen Fenster in einem Assistenten bleiben
- 21. Appcelerator Organisation plötzlich inaktiv
- 22. Admob-Status inaktiv
- 23. Twitter Bootstrap - Machen Sie eine Tabellenzeile inaktiv
- 24. Werkzeugleiste Menüpunkt ändert seine Farbe selbst, wenn der Cursor aktiviert Element
- 25. Zeige Google Adsense, wenn Adblock aktiviert
- 26. SIGNAL ausgeben, wenn der GUI-Thread in Qt inaktiv ist?
- 27. Warum verursacht iOS App in Xcode einen Speicherverlust, wenn inaktiv?
- 28. Speichert NSUserDefaults Objekte, wenn die Anwendung inaktiv wird?
- 29. Intent Extras bleiben gleich, auch wenn aktualisiert
- 30. d3js make tooltip bleiben, wenn geklickt
Ich versuche, VisualStudio's Intellisense zu imitieren. A ist das Vorschlagsfenster und B ist der Ort, an dem der Benutzer Text eingibt. Nachdem der Benutzer auf "A" (Ändern des ausgewählten Vorschlags usw.) geklickt hat, stelle ich den Fokus automatisch auf B zurück, damit der Benutzer weiter tippen kann, ohne den Fokus manuell zurücksetzen zu müssen. Die Fokusübertragung ist wie folgt: der Fokus ist auf B gesetzt, der Benutzer klickt auf A, bei der Maus nach oben setzt ich den Fokus zurück auf B. Ein Moment wird fokussiert, was zu einem blinkenden (oder flackernden) Fokus führt, den ich stoppen möchte . –