bigpoint Geschrieben 6. Dezember 2006 Teilen Geschrieben 6. Dezember 2006 Ich möchte eine Sanduhr in eine Form einbauen, etwa so mache ich es MyForm.ActiveForm.Cursor = Cursors.WaitCursor; for(...) { tue was } MyForm.ActiveForm.Cursor = Cursors.Default; [/PHP] Es wird aber leider nichts eingezeigt Hat jemand eine Idee warum?, bzw. was ist daran falsch? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
steinadler Geschrieben 6. Dezember 2006 Teilen Geschrieben 6. Dezember 2006 Also in C# funktionierts nach deinem Prinzip. Aber lass mich raten, du rufst innerhalb deiner Klasse sicherlich noch ein anderes Fenster auf, oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maddin Geschrieben 6. Dezember 2006 Teilen Geschrieben 6. Dezember 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 6. Dezember 2006 Autor Teilen Geschrieben 6. Dezember 2006 Aber lass mich raten, du rufst innerhalb deiner Klasse sicherlich noch ein anderes Fenster auf, oder? nein, aber was hätte es mit dem Cursor zu tun? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 6. Dezember 2006 Autor Teilen Geschrieben 6. Dezember 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
steinadler Geschrieben 6. Dezember 2006 Teilen Geschrieben 6. Dezember 2006 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Code Poet Geschrieben 6. Dezember 2006 Teilen Geschrieben 6. Dezember 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Trux Geschrieben 6. Dezember 2006 Teilen Geschrieben 6. Dezember 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Code Poet Geschrieben 6. Dezember 2006 Teilen Geschrieben 6. Dezember 2006 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Trux Geschrieben 6. Dezember 2006 Teilen Geschrieben 6. Dezember 2006 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 7. Dezember 2006 Autor Teilen Geschrieben 7. Dezember 2006 Vielen Dank für die Antworten. Ich habe gestern ein wenig geschlafen, und den Cursor innerhalb einen try … catch block aufgerufen, sobald ich aus dem block ihn rausnehme funktioniert alles prima Danke bigpoint Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Code Poet Geschrieben 10. Dezember 2006 Teilen Geschrieben 10. Dezember 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.