ProgressBar problem

0

Witam,
Mam pytanie co do tego:

private void timer1_Tick(object sender, EventArgs e)
{
progressBar1.Maximum = 100;
for (int i = 0; i <= 10; i++)
{
if (progressBar1.Value < 100)
progressBar1.Value += i;
else
timer1.Enabled = false;
if (timer1.Enabled == false)
{
main form = new main();
form.Show();
}
}
}

czemu wyświetla mi się ta forma zanim pasek postępu dojdzie do końca (progressbar)??
chce żeby nowa forma się wyświetliła dopiero po zapełnieniu progressbara...
Wiecie może co robie nie tak??

Z góry dzięki za pomoc,
Pozdrawiam

0

Dziwna petla. Sprobuj tak:

private void timer1_Tick(object sender, EventArgs e) { progressBar1.Maximum = 100; for (int i = 0; i <= 10; { if (progressBar1.Value < 100) progressBar1.Value += i;//na pewno o to Ci chodzilo? else { timer1.Enabled = false; main form = new main(); form.Show(); } } ```

Dziwna petla, bo za pierwszym tickiem ustawiasz progressa na 55, a za drugim na 100 - po co petla wiec?

0

teraz progressbar w ogóle się nie rusza :/ chodzi mi o taką pętle, która pokaże "ruch" progressbara od 0 do 100 - i w momencie dojścia do 100 wyświetli mi nową formę.

0

A tak? Maximum ustawiaj gdzie indziej (w inspektorze?), bo nie ma sensu za kazdym 'tickiem'. Zakladam, ze wartosc poczatkowa progressa to 0.

private void timer1_Tick(object sender, EventArgs e)
{
if (++progressBar1.Value < 100)
return;
timer1.Enabled = false;
main form = new main();
form.Show();
}

0

to jest to co chciałem, dzięki:)
Możesz mi tylko to opisać??;) Jestem początkujący w C# - wcześniej bawiłem się tylko Delphi...
if (++progressBar1.Value < 100) - dlaczego przed progressBar są te "++" - to jest to samo co moje progressBar1.Value += i; ??
i dlaczego dodałeś tam ten "return"??:)

Mój pomysł z for był całkowicie błędny??

dzięki WIELKIE za pomoc :)

0

++ oznacza zwiekszenie o 1 (w Delphi Inc jak kojarze). Do tego ++ przed zmienna oznacza, ze najpierw wystapi zwiekszenie, pozniej reszta operacji (tutaj porownanie z wartoscia 100). ++ po zmiennej zwieksza po obliczeniu reszty.

Return ze wzgledow estetycznych, identyczny efekt da taki kod:

if (++progressBar1.Value >= 100)
{
timer1.Enabled = false;
main form = new main();
form.Show();
}

ale ja wole tamten sposob, bo tu sie nie bawie w klamry i caly blok instrukcji. Kod z return oznacza, ze w razie gdy zmienna jest mniejsza od 100 (ale juz zwiekszona bo jest ++) to konczymy metode. W przeciwnym wypadku idziemy dalej i robimy to co napisane ponizej.

W Twojej pierwszej petli miales blad logiczny bo robiles += i; A i zwiekszalo sie za kazdym obiegiem petli. To oznacza, ze po zakonczeniu calej petli wartosc progressa to suma pierwszych 11 elementow ciagu arytmetycznego a0 = 0; a(n+1) = an + 1. Poza tym robiles to w jednej petli (co komputer wykonuje w mgnieniu oka), wiec nie bylo widac efektu przesuwania paska - bo trzeba bylo poczekac na kolejne wywolanie timera. Tak jak w przypadku mojego kodu wartosc zwiekszana o 1 za kazdym tickiem.
0

aha, super :) dzięki WIELKIE za pomoc i wytłumaczenie :)))

1 użytkowników online, w tym zalogowanych: 0, gości: 1