Frage

In meinem Programm mit einer Benutzeroberfläche in Windows Forms. Ich setze den Cursor an eine Sanduhr, kurz bevor ein Verfahren in Threadpool zu starten.

Mein Code in UI-Thread mit den Cursor sehen wie folgt eingestellt werden:

Application.UseWaitCursor = true;

Wenn das Verfahren abgeschlossen ist, gehe ich zurück zu dem UI-Thread der Cursor auf den Normalfall eingestellt werden.

Application.UseWaitCursor = false;

Mein Problem ist der Cursor Aufenthalt auf die Sanduhr, bis ich nicht die Maus bewegen. Es ist ein wenig zu stören, wenn der Benutzer warten auf das Ende der Aktion, ohne die Maus zu bewegen.

Wer kann mir helfen?

Jérôme

War es hilfreich?

Lösung

Ich bin nicht in der Lage, dieses Verhalten zu reproduzieren? Es funktioniert gut für mich.

Eine Sache zu beachten, obwohl, wenn Sie den Control.Cursor = Cursors.WaitCursor Ansatz verwenden, ist, dass es in der Regel, wie so verwendet:

this.Cursor = Cursors.WaitCursor

Welche zu funktionieren scheinen würden jedoch this die Form bezieht sich also, wenn der Benutzer die Maus auf eine andere Steuerung bewegt, beispiel einer TextBox dann ist die Maus nicht den Wartecursor zeigen.

Dies kann Verwirrung für die Benutzer führen. Oder könnte einige Probleme verursachen, wenn der Benutzer sonst die Arbeit an etwas weiter, wenn die Anwendung beschäftigt ist, tun andere Arbeit.

Andere Tipps

Eigentlich gibt es eine weitere Möglichkeit, es zu tun, die ich irgendwo dieses Problem nach Stunden gefunden haben.

Leider ist es ein Hack.

Im Folgenden ist ein Verfahren, dass ich, dass Griffe das Problem geschrieben haben.

/// <summary>
    /// Call to toggle between the current cursor and the wait cursor
    /// </summary>
    /// <param name="control">The calling control.</param>
    /// <param name="toggleWaitCursorOn">True for wait cursor, false for default.</param>
    public static void UseWaitCursor(this Control control, bool toggleWaitCursorOn)
    {
        ...

        control.UseWaitCursor = toggleWaitCursorOn;

        // Because of a weird quirk in .NET, just setting UseWaitCursor to false does not work
        // until the cursor's position changes. The following line of code fakes that and 
        // effectively forces the cursor to switch back  from the wait cursor to default.
        if (!toggleWaitCursorOn)
            Cursor.Position = Cursor.Position;
    }

Eine weitere Möglichkeit:

Cursor.Current = Cursors.WaitCursor;

Wenn Sie fertig sind, nur den Cursor wieder ändern:

Cursor.Current = Cursors.Default;

Sie den Cursor manuell einstellen. Das ist, was ich tue.

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