Timer resetten

Hallo
Ich habe folgendes Problem
meine progressBar läuft immer über 100 was zu einem error führt
das ganze sieht jetzt so aus

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
ProgressBar1.Value = ProgressBar1.Value + 7
If ProgressBar1.Value = 98 Then
Timer2.Stop()
Timer2.Enabled = False 'Hier wird der Timer resettet
Timer2.Enabled = True 'Hier wird der Timer resettet
End If
End Sub

kann mir jemand sagen was ich falsch mache?

Hallo Shrek14,

Hallo
Ich habe folgendes Problem
meine progressBar läuft immer über 100 was zu einem error
führt

Na dann schauen wir einmal :smile:

das ganze sieht jetzt so aus

Private Sub Timer2_Tick(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Timer2.Tick
ProgressBar1.Value = ProgressBar1.Value + 7
If ProgressBar1.Value = 98 Then
Timer2.Stop()
Timer2.Enabled = False 'Hier wird der Timer
resettet
Timer2.Enabled = True 'Hier wird der Timer
resettet
End If
End Sub

kann mir jemand sagen was ich falsch mache?

Ja kann ich Dir :wink:
Erstens bist du hier im falschen Brett, weil es sich um .Net handelt.
Aber sei es drum.

Hättest du Try / Catch verwendet, dann haettest du die Exception die ausgeworfen wird, dir mal anschauen können und haettest da gesehen das ein Überlauf stattfindet :confused:

Auch ist es ein ziemliches Wirrwar was du da zusammen getippselt hast.
Was willst du denn erreichen?

Eine Progressbar sollte nur einmal auf 100 laufen und wenn sie voll ist, dann den User damit signalisieren, das die ausgeführten Arbeiten fertig sind!

Aber zurück zu Deinem Problem. Du erhöhst den Value Wert immer um 7. Warum eigentlich? Beim erreichen von 98!(ich gehe mal von aus das 100 der Max Wert ist) stoppst du den Timer, danach startest du ihn wieder. Warum auch immer? Ich sehe darin keinen Sinn! Jedenfalls beim erneuten Event von Tick was aufgerufen wird ist der Value Wert der Progressbar 98 und du addierst 7 dazu, was wiederrum 105 macht! Bei einem Max Wert von 100 knallt es dann :smile:

Beschreibe doch mal bitte Dein Problem genauer, nur dann kann man Dir einen lauffähigen Source posten.

Aber eine kleine Anregung oder Änderung zu deinem Event.

 Private Sub Timer1\_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
 If ProgressBar1.Value + 7 \> ProgressBar1.Maximum Then
 ProgressBar1.Value += 7 - ProgressBar1.Maximum
 'Timer Reset 

MfG Alex

Hallo schonmal danke für deine Hilfe

Private Sub Timer2_Tick(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
Timer2.Tick
ProgressBar1.Value = ProgressBar1.Value + 7
If ProgressBar1.Value = 98 Then
Timer2.Stop()
Timer2.Enabled = False 'Hier wird der Timer
resettet
Timer2.Enabled = True 'Hier wird der Timer
resettet
End If
End Sub

Erstens bist du hier im falschen Brett, weil es sich um .Net
handelt.

hmm Unter Visual Studio habe ich für mein Projekt Visual Basic ausgewählt, und als Hilfe benutze ich ein Buch das sich Einstieg in Visual Basic 2010 nennt aber darin finde ich für mein Problem keine Lösung.

Hättest du Try / Catch verwendet, dann haettest du die
Exception die ausgeworfen wird, dir mal anschauen können und
haettest da gesehen das ein Überlauf stattfindet :confused:

Das ein überlauf stattfindet wusste ich schon hab ich dass nicht geschrieben?Darf man als Anfänger fragen was Try / Catch ist

Auch ist es ein ziemliches Wirrwar was du da zusammen
getippselt hast.
Was willst du denn erreichen?

das beim anklicken eines Buttons ein Timer startet und die Progressbar auf maximum also in diesem fall 100 läuft ( da ich den 7 schritt gut fand habe ich 89 als maximum da man so die progress bar fast voll hätte gewählt)und dann beim anklicken des nächsten Buttons das ganze sich wiederholt.

Eine Progressbar sollte nur einmal auf 100 laufen und wenn sie
voll ist, dann den User damit signalisieren, das die
ausgeführten Arbeiten fertig sind!

das ist bei mir nicht ganz der fall aber trotzdem möchte ich schonmal lernen wie man sie auf diese weise nutzt.

Aber zurück zu Deinem Problem. Du erhöhst den Value Wert immer
um 7. Warum eigentlich? Beim erreichen von 98!(ich gehe mal
von aus das 100 der Max Wert ist) stoppst du den Timer, danach
startest du ihn wieder. Warum auch immer? Ich sehe darin
keinen Sinn!

Ich hab mal ein bisschen google befragt und dort stand dass ich den Timer so resette mit
Timer.enabled= False
Timer.enabled= True

Jedenfalls beim erneuten Event von Tick was

aufgerufen wird ist der Value Wert der Progressbar 98 und du
addierst 7 dazu, was wiederrum 105 macht! Bei einem Max Wert
von 100 knallt es dann :smile:

SO ist es Deshalb sollte der Timer auch bei 98 stehen bleiben und nicht automatisch wieder starten.

Beschreibe doch mal bitte Dein Problem genauer, nur dann kann
man Dir einen lauffähigen Source posten.

Aber eine kleine Anregung oder Änderung zu deinem Event.

Private Sub Timer1_Tick(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Timer1.Tick
If ProgressBar1.Value + 7 > ProgressBar1.Maximum Then
ProgressBar1.Value += 7 - ProgressBar1.Maximum
'Timer Reset Public Class Form1

Dim B1 As String = „fs_game mods/1887Akimbo; vid_restart“
Dim B2 As String = „fs_game mods/AC130; vid_restart“
________________________________________________________________________
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Label1.Text = B1

Clipboard.Clear() ’ Löscht den Inhalt der Zwischenablage
Clipboard.SetText(B1) ’ Kopiert den Inhalt in die Zwischenablage
Timer2.Start()
End Sub
________________________________________________________________________
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Label2.Text = B2
Clipboard.Clear() ’ Löscht den Inhalt der Zwischenablage
Clipboard.SetText(B2) ’ Kopiert den Inhalt in die Zwischenablage
Timer2.Start()
End Sub
________________________________________________________________________
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

If ProgressBar1.Value + 7 > ProgressBar1.Maximum Then
ProgressBar1.Value += 7 - ProgressBar1.Maximum
'Timer Reset
Den letzten abschnitt würde ich so ändern

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Hier müsste zuerts einmal auch die ProgressBar auf null gesetzt werden da sie ja beim nächsten button nochmal von vorne laden soll
If ProgressBar1.Value + 5 > ProgressBar1.Maximum Then
ProgressBar1.Value += 5 - ProgressBar1.Maximum
'Timer Reset

mfg#
Jan

Oder ist es .Net aufgrund von Net Framework

Hallo Jan,

Erstens bist du hier im falschen Brett, weil es sich um .Net
handelt.

hmm Unter Visual Studio habe ich für mein Projekt Visual Basic
ausgewählt, und als Hilfe benutze ich ein Buch das sich
Einstieg in Visual Basic 2010 nennt aber darin finde ich für
mein Problem keine Lösung.

Ach das findest du dort ganz sicher. Das Buch ist wirklich gut. Nur sollte man es von Anfang lesen. Du musst die Grundprinzipien verstehen, sonst wird das alles nichts :frowning:

Das ein überlauf stattfindet wusste ich schon hab ich dass
nicht geschrieben?Darf man als Anfänger fragen was Try / Catch
ist

Also Try /Catch:

Das ist eine Fehlerbehandlungsroutine.
Du kannst doch Source schreiben und dabei Gefahr laufen das ein Fehler auftritt. Bestes Bsp. dafür ist zum Bsp. das ablegen von Daten in einer Datei. Du weisst ja nun nicht welchen Pfad der User angibt. Sicher könntest du alles prüfen, hat er die Rechte, ist genug Speicherplatz da etc. Nun vergisst du aber nur ein was und schwups tritt ein Fehler auf! Damit gernau das nicht passiert, gibt es Try / Catch (Finally)

Der Aufbau ist wiefolgt

Private Sub DeineProzedure(Args as DeineArgumente) Handles DeinElement.DasEvent
Try
'Code1
Catch EX as Exception
'Code2
Finally
'Code3
End Sub

Was passiert hier? Also wenn der Source (Code1) Fehlerfrei durchläuft, springt er bis zum Catch Zweig. Dieser wird aber nicht abgearbeitet! Danach springt er in den Finally Block und arbeitet den Source (Code3)da ab.
Tritt nun aber ein Fehler auf in Code1, springt er sofort in den Catch Zweig und arbeitet da den Source (Code2)ab. Danach geht er in den Finally Block und arbeitet den Source(Code3) ab.

Den Finally Block kannst du aber auch weglassen, sofern du in nicht brauchst :smile:
Du musst Dir halt nur merken, das er den Source der im Finally Block steht, definitv immer abarbeitet! Auch wenn du zum Bsp. eine Anweisung hast, alla Exit … oder Return …, so springt er noch einmal in den Finally Block.

Im Catch Block hast du Ex als Exception declariert. Du kannst dort natürlich auch den aufgetretenen Fehler abfragen. Informationen zum Fehler findest du da in dem Falle unter Ex.

Zum Bsp.

Catch Ex as DivideByZeroException

Auch kannst du den Catch Block noch erweitern und mehre Fehler abfangen. Das würde dann wiefolgt ausschauen

Catch Ex1 as DivideByZeroException
'Code
Catch Ex2 as StackOverflowException 
'code
Catch Ex3 as Exception

Das ist alles sehr vielseitig. Am besten schaust du einfach mal hier
http://openbook.galileocomputing.de/vb_net/msvb03000…
Da ist es auch schön beschrieben :smile:
Wie du siehst eine sehr schöne Sache. Und haettest du Try /Catch angewendet, so haettest du gesehen was los ist :wink:

das beim anklicken eines Buttons ein Timer startet und die
Progressbar auf maximum also in diesem fall 100 läuft ( da ich
den 7 schritt gut fand habe ich 89 als maximum da man so die
progress bar fast voll hätte gewählt)und dann beim anklicken
des nächsten Buttons das ganze sich wiederholt.

Der Sinn davon ergibt sich mir nicht :frowning: Das ist reine Zeitverschwendung. Eine Progressbar nimmst du zum Bsp, wenn du Dateien kopieren willst und den Fortschritt damit anzeigen möchtest. Aber nun gut.

das ist bei mir nicht ganz der fall aber trotzdem möchte ich
schonmal lernen wie man sie auf diese weise nutzt.

Du setzt in der Progressbar die Eigenschaft Maximum. Dann setzt du immer nur die Value Eigenschaft auf einen Wert und der wird dann entsprechend angezeigt!

Ich hab mal ein bisschen google befragt und dort stand dass
ich den Timer so resette mit
Timer.enabled= False
Timer.enabled= True

Jedenfalls beim erneuten Event von Tick was
SO ist es Deshalb sollte der Timer auch bei 98 stehen bleiben
und nicht automatisch wieder starten.

Das hat mit dem Timer nichts zu tun, Jan.
Ein Timer macht nichts anderes, wie ein absenden in gewissen Zeitabstaenden. Wie lange der Abstand dauert kannst du mittels der Eigenschaft Intervall festlegen. Das Event (Ereignis) was dann auftritt nennt sich Tick.

wenn man die Zeile über dieser weglässt kommt das
schon
ziemlich nah dran
nur das die Progressbar auf maximum stehen
bleiben soll bis der nächste Button aktiviert wird erst dann
sollte die ProgressBar wieder von 0 bis 100 laufen bei den
schritten könnte ich mich auch mit 5 anstatt 7 anfreunden

ich werde mal die hierfür wichtigen teile des Programms
anhängen

Gut, dann gehst du anders vor!

Erst einmal eine logische Überlegung.
Du hast 2 Buttons. Beim Klick auf den ersten Button, soll die Progressbar los laufen, bis zu ihrem Maximum Wert. Wenn dieser erreicht ist, soll sie stehen bleiben. Was passiert aber nun wenn genau in dieser Zeit der Button 2 geklickt wird? Richtig, dann wird alles mist. Also sperren wir den 2 Button dafür und geben ihn erst frei wenn die Progressbar ihren Max. Wert erreicht hat!
Hört sich vielleicht kompliziert an, ist es nicht.

Hier ein Demo

Public Class Form1

 Private Sub Timer1\_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
 If ProgressBar1.Value = ProgressBar1.Maximum Then
 CType(sender, Timer).Stop()
 Button1.Enabled = True
 Button2.Enabled = True
 Else
 ProgressBar1.Value += 1
 End If
 End Sub

 Private Sub Button1\_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 Button2.Enabled = False
 ProgressBar1.Value = 0
 Timer1.Interval = 50
 Timer1.Start()
 End Sub

 Private Sub Button2\_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
 Button1.Enabled = False
 ProgressBar1.Value = 0
 Timer1.Interval = 50
 Timer1.Start()
 End Sub

 Private Sub Form1\_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 ProgressBar1.Maximum = 100
 End Sub
End Class

Wie du siehst eigentlich ganz einfach.
Durch setzen des Maximum Wertes im Load Ereignis des Formulares kannst du allgemein (Für Klick auf Button1 oderButton2)die Dauer der Zeit bis die Progressbar voll ist erhöhen.
Durch erhöhen/erniedrigen des Intervalls im Click Ereignis des Buttons kannst, du die Laufzeit erhöhen oder veringern für den Button.

Spiele damit mal ein wenig herum und ändere da mal die Werte. Dabei wirst du feststellen wie sich alles verhaelt :smile:

MfG Alex

Oder ist es .Net aufgrund von Net Framework

Eigentlich schon. Aber ein wenig kenne ich mich VB.NET aus und kann Dir da auch hier helfen :wink:

MfG Alex

so habs hinbekommen vielen Dank für deine Hilfe