Guten Morgen, ich habe ein Problem mit der FOR-Schleife von VisualBasic2010. Ich möchte bei Erreichen eines bestimmten Wertes der Laufvariablen diese bei einem Label anzeigen. Hier der Minimalcode (Rest schon entfernt!): Public Class Form1 Shared i As Short Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click For i = 0 To 100 If i = 67 Then Label2.Text = "67" End If Debug.Print(i) System.Threading.Thread.Sleep(100) Next End Sub End Class Das Programm soll mir beim Erreichen von i=67 eine "67" ins Label2 schreiben. Die FOR-Schleife wird einfach mit dem Button1 gestartet. Beim erreichen von 67 ist die Schrift im Label2 nur noch halb zu sehen und erst am Ende der Schleife steht im Label2 die 67 drin! Wenn ich in den Eigenschaften den Wert AutoSize auf False ändere bleibt zumindest die Schrift im Label2 bis zum Ende vollständig erhalten. Warum??? Eigentlich wollte ich im Label2 den Wert von i beim Durchlauf anzeigen lassen. Schönen Pfingstmontag noch J.
Label2.Text = "67" Label2.Refesh Ggf. nennt sich's auch Label2.Update, da musst Du in den Methoden zu Label nachsehen.
probier mal Label2.update oder DoEvents oder in der Richtung weiter gurgeln...
VB-MD schrieb: > Eigentlich wollte ich im Label2 den Wert von i beim Durchlauf anzeigen > lassen. Solange du mit deiner Schleife den Main Thread blockierst, kann das Betriebssystem nichts zeichnen. Daher nimmt man bei länger laufenden Aktionen Worker Threads. Siehe hier: https://en.wikipedia.org/wiki/Thread_(computing)#Multithreading Alternative Lösungen ohne eigenen Thread wurden bereits genannt, ich wollte dir eigentlich nur das Problem verdeutlichen. Bei kurzen Aktionen wie beim Zählen auf 100 sollte das eigentlich so schnell gehen, dass man garnicht bemerkt, dass die Oberfläche kurzzeitig eingefroren ist. Zu welcher Kategorie Dein Programm gehört hängt davon ab, was du in der Schleife wirklich machst. Den Main Thread mit einem Sleep zu blockieren ist nicht nett gegenüber dem restlichen Programm, dafür nimmt man eher Timer und lässt sich nach jeweils 100ms benachrichtigen. Michael
:
Bearbeitet durch User
Danke Michael, wie Du schon vermutest, ist die Schleife eigentlich mein Haptprogramm. Sie zählt dann bis 4097 und gibt jedesmal über die COM1 zwie Zeichen an einen ATMega32. Deshalb auch der Sleep-Befehl damit die serielle Schnittstelle mitkommt. Ich wollte bloß dabei sehen wie weit der Prozess schon ist! Bisher sehe ich dies nur im Direktfenster.
VB-MD schrieb: > If i = 67 Then > Label2.Text = "67" My.Application.DoEvents() <-------------- DAS da rein, und gut ist. > End If Refresh't die ganze Form, nicht nur den Label. Gruß Pucki
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.