4.9k Aufrufe
Gefragt in Anwendungen(Java,C++...) von
Hallo zusammen,

hab ne einfache Frage.
Kann man in Visual Basic 2008 ein Label mehrmals ändern?
Soll heißen:
Wenn mein Prog läuft soll sich als sogenannter "Status einer Aktion" das Label ändern, also der sichtbare Text.
Es klappt soweit das sich der voreingestellte Text einmal ändert, aber halt nicht mehrmals...

Sollte das gehen, bitte ich um denkanstöße in Sachen Quellcode.
Viele Dank.

gruß Tobias

20 Antworten

0 Punkte
Beantwortet von
Hi,

Klar sollte das gehen den LableText zur Laufzeit mehrmals zu ändern. Warum auch nicht?

Kurzer Test:
-neues Project (Windows Forms)
-einen Button einfügen
-einen Timer einfügen
-ein Label einfügen
-Rechtsklick auf einen leeren Bereich von Form1, "Code anzeigen"
-hier folgendes Einfügen



Dim i As Integer
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
Label1.Text = ""
i = 0
If Timer1.Enabled = False Then
Timer1.Enabled = True
Else
Timer1.Enabled = False
End If
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Timer1.Tick
i += 1
Label1.Text = i & " mal geändert"
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
Timer1.Interval = 2000
Label1.Text = ""
End Sub


Debugging starten und auf den Button1 klicken. Nun sollte sich der LableText alle 2 sek ändern.

Mögliche Fehler (ohne Deinen Code zu kennen):
-Verwendung von Variablen um den Text zusammenzusetzen => Gültigkeitsbereiche beachten (z.B. Ausblenden von modulweiten Variablen bei gleichnamigen (lokalen) Variablen in der Procedure)
-Codezeile zur Textänderung oder auch zur Variablenänderung wird nur ein einziges Mal durchlaufen (falsche Verzweigung, falsche Bedingungen, etc.)
- usw. usf.

Bye
malSchauen
0 Punkte
Beantwortet von
erstmal vielen Dank für die Antwort, allerdings kann ich das nicht ganz umsetzen...

ich habe bei mir kein Button auf den ich drücken kann sondern nur timer bzw. es läuft alles automatisch nach bestimmten zeiten ab....

jetzt müsste sich das label auch nur noch nach einer bestimmten zeit ändern...

habs mal damit probiert...klappt aber nicht...

For x = 0 To 60
x = x + 1

If x = 10 Then
Label13.Text = "Status abfragen..."
If x = 20 Then
Label13.Text = "Verbindung wird hergestellt..."
End If
End If
Next

Der Code steht in der Private Sub Timer1.
Danke schonmal....
0 Punkte
Beantwortet von
Hi,

Das Du das in Deinem Programm so nicht wiederfinden kannst, ist klar. Daher schrieb ich auch, Du mögest für einen Test meines Codes ein neues Project aufmachen. Aber egal.

Ich nehme an, Dein LableText ändert sich auf "Status abfragen..." und bleibt dann so? Da Du ja nur Denkanstösse forderst: Schau Dir den zweiten IF-Block und dessen Position im Code mal ganz genau an. ;-)

Bye
malSchauen
0 Punkte
Beantwortet von
Hi,

@tkder1
Noch nicht gelesen, oder brauchst Du noch einen Tipp zur Selbsthilfe?

Tipp:
Untersuche mal Deinen Code aus #2 daraufhin, WANN die Bedingung "x =20" abgefragt wird, und ob sie zu diesem Zeitpunkt jemals wahr sein kann.

Bye
malSchauen
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Tobias,

da hat @malSchauen wohl recht. Zum einen wird die Variable "x" nie den Wert 20 annehmen und zum anderen müssen beide If-Abfragen alleine und nicht verschachtelt stehen, denn es wird nie zu der Konstellation Wenn x = 10 und danach Wenn x = 20 kommen.
Warum wird die Variable "x" nie den Wert 20 annehmen? Weil einmal die Variable x durch die Schleifenschritte gefüllt wird, also von 0 bis 60 und gleich nach dem Füllen durch die Schleife durch die Addition x = x + 1 um den Wert 1 erhöht wird. Das bedeutet, am Anfang hat diese Variable den Wert 1 (Durch die Schleife den Wert 0, durch die Addition "x = x + 1" den Wert 1), beim nächsten hat Sie den Wert 3 (Durch die Schleife den Wert 2, durch die Addition "x = x + 1" den Wert 3), danach den Wert 5 (Durch die Schleife den Wert 4, durch die Addition "x = x + 1" den Wert 5)usw.

Noch eine andere Anmerkung. Ich habe hier gerade kein Visual Basic 2008 zur Verfügung, aber bei VB6 gab es die Eigenschaft ".Text" bei Labelfeldern noch nicht. Dort war es die Eigenschaft ".Caption". Eventuell ist dass auch noch ein Fehler?

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo,

ich noch mal. Die Anmerkung bezüglich der "Label.Text-Eigenschaft" kann verworfen werden. Ich habe gerade in Visual Basic 2008 nachgesehen und dort gibt es die Eigenschaft ".Text".
Habe damit noch nicht soviel Erfahrung, daher die falsche Anmerkung.
Ich sollte eventuell doch etwas mehr mit VB2008 als mit VB6 machen.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von
Hallo coros und malSchauen,

bitte entschuldigt das ich mich noch net gemeldet habe...bin zurzeit nicht "im Lande", also nicht direkt am Rechner an dem ich programmiere..

das mit der if schleife hab ich auch schon gemerkt ;)
wie kann ich es am besten realisieren das er einfach nur 1 bei jedem schleifendurchlauf hochzählt?
werde mich heute abend mal um die verschachtelung der if anweisungen kümmern...melde mich dann morgen wieder...

gruß und danke
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Tobias,

lösche die Zeile

x = x + 1aus Deinem Code heraus, denn das Hochzählen geschieht ja immer um den Wert 1 durch die Schleife.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von
Hallo coros,

wie recht du doch hast....oh man, meine Programmierzeit liegt wohl doch schon länger zurück als gedacht...
aber ich fitz mich schon wieder rein ;)

Vielen Dank
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Tobias,

gerne geschehen. Ist das Problem denn nun gelößt oder nicht?

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
...