Zum Inhalt springen

Sanduhr mit C#


bigpoint

Empfohlene Beiträge

Die Eigenschaft Cursor bezieht sich auch nur auf das entsprechende Form-Objekt. Die Sanduhr wird dementsprechend auch nur dann angezeigt, wenn du mit der Maus über diesem Objekt hoverest. Alle anderen Steuerelemente verwenden weiterhin den Standardcursor.

Das weis ich deswegen benutze ich den Cursor von dem Formular.

Link zu diesem Kommentar
Auf anderen Seiten teilen

nein, aber was hätte es mit dem Cursor zu tun?

Hätt ja sein können du hättest nen modalen Dialog aufgerufen, da geht das ganze nämlich solange nicht, bis du den beendest.

Also ich kann in deinem Code nix falsches feststellen.

Hast du denn in der for-Schleife überhaupt genügend drin, dass die Sanduhr Zeit hat, angezeigt zu werden?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo BigPoint,

ich habe mit VB mal folgendes ausprobiert:

Formular mit zwei Buttons unter denen dieser Code liegt


Private Sub btnHourGlass_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHourGlass.Click


        Me.Cursor = Cursors.WaitCursor


End Sub


Private Sub btnDefault_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDefault.Click


        Me.Cursor = Cursors.Default


End Sub

Es hat normal funktioniert. Dann in C# nochmal das selbe:

         private void btnHourGlass_Click(object sender, EventArgs e)

        {

            this.Cursor = Cursors.WaitCursor;

        }


        private void btnDefault_Click(object sender, EventArgs e)

        {

            this.Cursor = Cursors.Default;

        }

Auch ordnungsgemäß funktioniert.

Also ist wirklich entweder die Schleife so schnell durch, dass er gar nicht zum Anzeigen des WaitCursor kommt oder Deine Referenz

"MyForm.ActiveForm"

zeigt gar nicht auf die Form von der Du glaubst, dass sie die gerade aktiv ist.

Aus der MSDN-Onlinehilfe

Form.ActiveForm

Ruft das momentan aktive Formular für diese Anwendung ab.

Ist inzwischen ein anderes Fenster in Deiner Form aktiv geworden (in der Schleife oder aus sonst einem Grund)?

Edit: Ganz simpler Gedanke - innerhalb welchen Kontexts rufst Du den Code bei Dir auf?

Aus einer Klasse heraus, der die Form als "MyForm" bekannt ist (z.B. eine andere Form)?

Oder aus der Klassendefinition von "MyForm" selbst?

Wenn Du innerhalb der "MyForm"-Klasse arbeitest, einfach mit this.Cursor arbeiten, wie in meinem Beispiel oben.

Wenn Du sonstwo eine Instanz der Form namens "MyForm" ansprichst und möchstest, dass auf dieser Instanz der Cursor wechselt, dann benutze

MyForm.Cursor = Cursor.[Welcher es denn sein soll]

Gruß,

Das Füchslein

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ein Funktionsaufruf ist ja bekanntlich syncron.

Wenn du zu beginn den Cursor auf wait stellst und in deiner Methode noch was machst, dann wieder auf normal schaltest kann der Thread in dem du ausgeführt wirst doch garnich den Cursor ändern.

Will heißen das du den cursor oder die berechnung (schleife) in einem anderen thread-context ausführen solltest.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ein Funktionsaufruf ist ja bekanntlich syncron.

Wenn du zu beginn den Cursor auf wait stellst und in deiner Methode noch was machst, dann wieder auf normal schaltest kann der Thread in dem du ausgeführt wirst doch garnich den Cursor ändern.

Will heißen das du den cursor oder die berechnung (schleife) in einem anderen thread-context ausführen solltest.

Das wäre mir aber neu. Habe es gerade auch mal ausprobiert:


this.Cursor = Cursor.WaitCursor;


{ Some really nasty calculations }


this.Cursor = Cursor.Default;

Der Cursor wurde ordnungsgemäß auf Sanduhr gestellt und hat sich nachher zurückgesetzt, ohne, dass ich einen neuen Thread dafür erzeugen musste. Anderes hätte mich jetzt auch sehr gewundert, obwohl Du prinzipiell Recht hast, dass bei aufwändigen Arbeiten ein separater Thread sinnvoll ist!

Bei der Gelegenheit habe ich gleich mal ausprobiert, was passiert, wenn die Berechnung zwischen dem Umschalten sehr kurzweilig ist. Es kann tatsächlich sein, dass in dem Fall der Cursorwechsel gar nicht zu sehen ist!

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich denke es kommt drauf an wo man die Berechnungen ausführt...

(Also ich hab es jetzt alles nicht getestet, ist nur so aus der Luft gegriffen)

Also wenn man die "Krasse berechnung" im ButtonClick oä ausführt kann ich mir gut vorstellen das es nicht hinhaut mit dem wait cursor...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi BigPoint,

schön, dass es funktioniert. Das würde dann aber auch bedeuten, dass bevor Du im Code zum Cursorsetzen kommst, im TRY-CATCH block was in die Hose geht und eine Exception schmeißt.

Ansonsten sollte es jedenfalls keinen Unterschied machen, ob das innerhalb oder außerhalb eines solchen Blocks steht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...