Frage

Gibt es eine Möglichkeit, ein Fenster inaktiv zu halten suchen, auch wenn es den Fokus enthält? Ich habe zwei Formen (A und B). Nachdem der Benutzer interagiert mit A, I übertragen das Ergebnis der Fokus Transfers B. Fokus zurück (der Benutzer Maustaste auf das A, dann zurück zu B übertragen wird, konzentrieren) auf inaktiv dass die Form einer aus dem aktiven blinkt. Das sieht hässlich (vor allem auf Vista, in der A für einen Moment einen größeren Schatten bekommt). Wie kann ich einen Aufenthalt inaktiv suchen, so wird dieses Blinken nicht passieren?

War es hilfreich?

Lösung

Endlich fand ich die Antwort!

ACHTUNG:. nicht über diese Technik Antwort missbrauchen Dadurch wird Ihre Benutzer verwirren und wird an das Computer-Erlebnis im Allgemeinen schädlich sein. Die unten beschriebene Technik kann unter Umständen sehr nützlich sein (z IntelliSense-ähnliches Verhalten implementiert werden), aber Sie in Ihre Benutzung es zweckmäßig sein.

Die WM_NCACTIVATE Nachricht an ein gesendet wird Fenster, um den Zustand seines nicht-Client-Bereichs (dh Grenze und titlebar) auf inaktiv oder aktiv zu ändern. Der WParam der Nachricht zeigt an, ob der Zustand inaktiv oder aktiv sein wird. Wenn das WParam wahr (ein Wert von 1), wird das Fenster aktiv aussehen. Wenn die WParam false (ein Wert von 0) ist, wird das Fenster inaktiv aussehen. Um ein Fenster zu zwingen, entweder inaktiv oder aktiv zu bleiben, überschreiben die WParam indem sie sich auf den entsprechenden Wert einstellen (0 oder 1), und Sie werden ganz eingestellt werden!

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);
}

Andere Tipps

Sie sprechen über ein Standardverhalten eines gui Modell zu ändern. Ich würde raten, nicht so zu tun. Wenn der Benutzer soll etwas auf A, dann zurück nach B zu tun ist, verschwindet A nicht? Warum ist es blinkt "? Es sollte einen einzigen Schalter, wenn die Fokusänderung geschieht.

konnte nicht aus sagen, was Sie beschreiben, ist der Fokus Schalt wie:

A-> B
B-> A> Benutzer Klick-> B
B-> A

Nicht sicher, ob das hilft, aber Winforms unterstützt das Konzept des Besitz Formen. Zum Beispiel, obwohl Abreißleisten außerhalb eines Fensters der obersten Ebene leben, sie bleiben aktiv, auch wenn das Fenster der obersten Ebene aktiv ist (und umgekehrt). Ebenso mögen Sie die Benutzer in der Lage sein, mit Ihrer Form A zu interagieren, ohne Form B zu deaktivieren.

Um dies zu erreichen, es klingt wie Sie b.AddOwnedForm(a) anrufen müssen, kurz bevor Sie a zeigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top