Prozentanzeige und Progressbar
-
Also ich hab da mal wieder n Problem...
Ich will einen Statusbalken mit ner Prozentanzeige darunter bauen.
Das Programm soll auf knopfdruck eine schleife 100 mal ausführen und pro ausgeführter schleife die Prozentanzeige um einen erhöhen und alle 10 Prozent den ProgressBar um einen Strich erhöhen und danach immer 50 Millisekunden stoppen (sleep).
Soweit mein Code:
(Meine Frage ist darunter)using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Threading; // Der Windows Automatisch generierte Müll: namespace ProgressBar { /// <summary> /// Zusammenfassung für Form1. /// </summary> public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.ProgressBar progressBar1; private System.Windows.Forms.Label label1; private System.Windows.Forms.Button button1; /// <summary> /// Erforderliche Designervariable. /// </summary> private System.ComponentModel.Container components = null; public Form1() { // // Erforderlich für die Windows Form-Designerunterstützung // InitializeComponent(); // // TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu // } /// <summary> /// Die verwendeten Ressourcen bereinigen. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Vom Windows Form-Designer generierter Code /// <summary> /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// </summary> private void InitializeComponent() { this.progressBar1 = new System.Windows.Forms.ProgressBar(); this.label1 = new System.Windows.Forms.Label(); this.button1 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // progressBar1 // this.progressBar1.Location = new System.Drawing.Point(16, 24); this.progressBar1.Name = "progressBar1"; this.progressBar1.Size = new System.Drawing.Size(256, 40); this.progressBar1.TabIndex = 0; // // label1 // this.label1.Location = new System.Drawing.Point(32, 80); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(240, 48); this.label1.TabIndex = 1; this.label1.Text = "0%"; this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // button1 // this.button1.Location = new System.Drawing.Point(48, 176); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(192, 56); this.button1.TabIndex = 2; this.button1.Text = "LOS"; this.button1.Click += new System.EventHandler(this.button1_Click); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.button1); this.Controls.Add(this.label1); this.Controls.Add(this.progressBar1); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); } #endregion /// <summary> /// Der Haupteinstiegspunkt für die Anwendung. /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); } //Mein Code: private void button1_Click(object sender, System.EventArgs e) { int i = 0; int prozent = 0; while(i<100) { prozent++; label1.Text = prozent + "%"; if (prozent >= progressBar1.Value + 10) { progressBar1.PerformStep(); } i++; Thread.Sleep(50); } } } }
Nun, der Progressbar füllt sich ganz wunderbar und zeigt mir perfekt den Verlauf an. Von der Prozentanzeige kann man das jedoch nicht behaupten....
Die springt lediglich am ende von 0% auf 100% an.
Wenn ich statt einem Label ne Text Box verwende (Mit Read Only) passiert exakt das selbe.
Hilfe
Es sollte doch möglich sein den Text von dem Label so ständig zu ändern oder?
(Ich mein bei nem Installer sieht man das ja auch in ner ziemlich hohen Geschwindigkeit, wenn der einem anzeigt welche Datei er grad kopiert...)
Wenn ich das Teil debugge und mir in das Überwachen-Fenster label1.Text reinhole seh ich dass der Text sehr wohl immer geändert wird, schätze das is dann irgendein Anzeige Problem oder sowas..
Danke schonmal
-
ach ja und noch ne weitere Frage:
Wenn ich jetz da noch einen Abbrechen-Button reinbaue um den prozess zu stoppen und so zu lassen wie er zu dem zeitpunkt ist, wie mach ich das?
Ich meine mich zu erinnern das das mit nem höher wertigen thread geht oder so aber was muss man da genau schreiben?
-
[freu]moahahahahahah
hab die erste Frage selber gelöst[/freu]man musste in die Schleife noch ein
label1.Refresh();
einfügen jetz läufts prima
Naja aber meine zweite Frage bleibt noch..
-
hi, mich würde interessieren, wie ich jetzte anstatt der blauen fortschrittsanzeige, die grafisch besser aussehnde von windows selbst bekomme!also die die zum beispiel läuft wenn man mit dem internetexplorer downloaded???
lg rizi
-
Such mal im Internet nach .manifest-Dateien bzw. compilier das Programm mit VS2005
Greetz