Forum: PC-Programmierung Label in For-Schleife bei VB2010


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von VB-MD (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von MWS (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Label2.Text = "67"
Label2.Refesh

Ggf. nennt sich's auch  Label2.Update, da musst Du in den Methoden zu 
Label nachsehen.

von honko (Gast)


Bewertung
0 lesenswert
nicht lesenswert
probier mal Label2.update
oder DoEvents
oder in der Richtung weiter gurgeln...

von Michael D. (nospam2000)


Bewertung
0 lesenswert
nicht lesenswert
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
von VB-MD (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Alexander K. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.