PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C#] Progressbar?


misterh
2006-09-28, 22:50:24
Wie kann ich ein Progressbar einbauen in C#?

Gibt da gute beispiele?

Gast
2006-09-28, 22:54:54
Klick das Ding in die Form und änder die Properties entsprechend während du deinen Code ausführst?

Und wenn die GUI reaktiv bleiben willst brauchst du eben Threads.

misterh
2006-09-28, 23:00:40
ich hab ja schon bisjetzt bei mein benchmark Dualcore support eingebaut etc.

und wollte diese zeit felder in Balken umwandeln. also Progressbar.

ich kriege irgendwie nicht hin oder mache nicht richtig.

Gast
2006-09-30, 11:14:57
Hallo! Kannst du hier versuchen:

// Simple Progressbar
using System;
using System.Windows.Forms;

namespace ProgressBar
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
int i = 0;
// Maximum einstellen
progressBar1.Maximum = 99999;
// Schrittweite einstellen
progressBar1.Step = 1;
while(true) {
i++;
if (i == progressBar1.Maximum)
{
break;
}
progressBar1.PerformStep();
}
progressBar1.Value = 0;
}
}
}

Der Name der Progressbar ist "progressbar1".


Greetings from Stuttgart

Elemental
2006-10-02, 09:29:27
Sorry für OffTopic, aber @Gast:
Diese "while(true)"-Schleifen find ich ja immer sehr unschön...

Wieso nicht einfach

while(i < progressBar1.Maximum)
{
i++;

progressBar1.PerformStep();
}



mfG

Expandable
2006-10-02, 11:23:33
Und noch schöner:


for (int i = 0; i < progressBar1.Maximum; ++i)
progressBar1.PerformStep();


;)

ethrandil
2006-10-02, 12:33:06
:mark1
i++;
if (i == progressBar1.Maximum)
{
goto mark2;
}
progressBar1.PerformStep();
goto mark1;
:mark2

Wozu Highlevelkonstrukte? (http://www.thocp.net/biographies/papers/goto_considered_harmful.htm)

- eth

Elemental
2006-10-02, 19:14:29
"goto" ist böse ;)

Coda
2006-10-02, 19:38:22
Manchmal ist es nötig (ausbrechen aus Inner-Loops z.B.)

Elemental
2006-10-02, 19:39:41
Manchmal ist es nötig (ausbrechen aus Inner-Loops z.B.)

Naja, da gibts auch Wege das goto zu vermeiden. Ob das dann "schöner" ist sei dahingestellt...

ethrandil
2006-10-02, 21:24:55
Also das ist zwar ziemlich OT aber habt ihr mal ein treffendes Beispiel, wo man goto braucht? Ich will überlegen, wie ich das umgehen würde. Machts mir schwer ;)

- eth

Gast
2006-10-03, 09:07:51
for(...) {
for(...) {
if(cond) goto label;
}
}

label:
Natürlich geht es anders, aber das ist das performanteste.

Must mal den Linux-Source durchsuchen, da sind tausende gotos drin ;)

Elemental
2006-10-03, 10:51:43
Also das ist zwar ziemlich OT aber habt ihr mal ein treffendes Beispiel, wo man goto braucht? Ich will überlegen, wie ich das umgehen würde. Machts mir schwer ;)

- eth



void DoSomething()
{
label1:

try
{
//...irgendwas
}
catch(Exception ex)
{
goto label1;
}
}


Das erste was mir eingefallen ist... ;)

ethrandil
2006-10-03, 12:00:38
for(...) {
for(...) {
if(cond) goto label;
}
}

label:
Natürlich geht es anders, aber das ist das performanteste.

Must mal den Linux-Source durchsuchen, da sind tausende gotos drin ;)
Ja klar, wenn Performanz das Ziel ist, kann man auch gleich assembler nehmen ;). Aber es geht beim Goto-Abschaffen ja um Softwarequalität (Verständlichkeit, Änderbarkeit).

for(.;. && !cond;.) {
for(.;.&& !cond;.) {
;
}
}

Das ist zwar nicht ganz das selbe, aber im konkreten Fall kann mans in etwa so machen.

Und zum zweiten:
void DoSomething()
{
boolean error = false;
do{
try
{
//...irgendwas
error = false;
}
catch(Exception ex)
{
error = true;
}
}while(!error);
}

war ja gar nicht so schwer... :rolleyes:

- eth

Gast
2006-10-03, 12:44:04
Aber es geht beim Goto-Abschaffen ja um Softwarequalität (Verständlichkeit, Änderbarkeit).

Was ist daran nicht verständlich? Goto hat nen viel zu schlechten Ruf meiner Meinung nach, bzw. es ist zu ner Art Urban Legend geworden dass man es unbedingt unter allen Umständen vermeiden muss.

ethrandil
2006-10-03, 13:51:47
Was ist daran nicht verständlich? Goto hat nen viel zu schlechten Ruf meiner Meinung nach, bzw. es ist zu ner Art Urban Legend geworden dass man es unbedingt unter allen Umständen vermeiden muss.Natürlich muss man es nicht unbedingt. In deinem Beispiel ist der Unterschied, dass man meinem Konstrukt an der ersten Zeile ansieht, worum es geht und wie lange es läuft.
Beid deiner Variante sieht man es erst in der 3. Zeile.

Man mag einwenden, dass das nicht so schlimm ist - das stimmt. Aber wenn da noch 30 Zeilen zwischen sind kanns unübersichtlich werden. Erst recht wenn noch weitere Sprunganweisungen für andere labels dazukommen ;)
Goto ist gefährlich - nicht per se böse.

- eth

misterh
2006-10-03, 15:36:16
Vielen Dank Leute für viele Beispiele ^^

ich schau mir mal genauer an. :wink:

misterh
2006-10-03, 16:53:57
wenn ich das mache, dann klappt dualcore support usw nicht mehr. nur das wieder nur 1core rennen tut.

:/

ich schau mal nach info darüber.

ethrandil
2006-10-03, 21:51:48
Hi, ich habe grade mit MisterH gechattet - aber keine Ahnung von c#.

Er hat folgnende Methode versucht einzubauen
public static void DC001()
{
progressBar1.Step = 1;
progressBar1.Maximum = 100000;

for (int i1 = 0; i1 < progressBar1.Maximum; ++i1)
progressBar1.PerformStep();

progressBar1.PerformStep();
progressBar1.Value = 0;

} aber erhielt sechs Kompilerfehler ("An object rederence is required for the nonstatic field, method, or property ^naja.Form1.progressBar1^") und blaue Unterstreichungen von 'progressBar1'.
Ich nehme an, dass progressBar1 erst deklariert werden oder in einem GUI-Editor erstellt werden muss. Ich habe aber nunmal keine Ahnung von c# und auch kein gutes Tutorial (kennt ihr eins?).
Könnt ihr kurz erklären, was er machen muss?

- eth

Elemental
2006-10-04, 08:59:43
Naja, wie die Meldung schon sagt:
""An object rederence is required for the nonstatic field".

progressBar1 ist nicht static, also brauchst du erstmal ne Instanz der Klasse, zu der progressBar1 gehört, um darauf zugreifen zu können.

mfG

Xmas
2006-10-04, 14:19:55
Mit anderen Worten, die Methode DC001 sollte nicht static sein.

TheGamer
2006-10-04, 19:24:57
Mit anderen Worten, die Methode DC001 sollte nicht static sein.

So ist es MisterH

misterh
2006-10-04, 20:26:18
So ist es MisterH

ich verzichte auf Progressbar. basta :(

Elemental
2006-10-05, 11:46:07
ich verzichte auf Progressbar. basta :(

Oder so :biggrin: ;)

TheGamer
2006-10-05, 11:51:36
ich verzichte auf Progressbar. basta :(

Du könntest Leute laufen die es machen.

Wie Microsoft:

Wenn die was nicht können wird aufgekauft oder es dabei belassen :D

Gast
2006-10-05, 13:45:23
Jede Firma muss Leute einstellen die das Produkt auch herstellen können. Was ist daran jetzt so besonders bei Microsoft?

Und btw. würde ich da MS schon lange nicht mehr unterschätzen, die haben verdammt fähig Leute. Wenn man sich allein das .NET-Framework genauer ansieht wird einem das schnell bewusst.

TheGamer
2006-10-05, 13:59:01
Jede Firma muss Leute einstellen die das Produkt auch herstellen können. Was ist daran jetzt so besonders bei Microsoft?

Und btw. würde ich da MS schon lange nicht mehr unterschätzen, die haben verdammt fähig Leute. Wenn man sich allein das .NET-Framework genauer ansieht wird einem das schnell bewusst.


Kenn auch niemanden der hier was anderest geschrieben hat :)

misterh
2006-10-05, 16:42:02
Du könntest Leute laufen die es machen.

Wie Microsoft:

Wenn die was nicht können wird aufgekauft oder es dabei belassen :D

komischer vergleich. :rolleyes: