Autor Beitrag
ayin
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 04.10.08 19:16 
Hallo!

Ich bin neu hier und hoffe ich mache nichts falsch hier:

Ich habe einen Label definiert, doch der wird nicht angezeigt während des Abalaufs des Programms. Vielleicht habt ihr eine Ahnung warum das so ist.

Hier mein Codeschnipssel: (Das Label heisst txtStatus und ich habe die entsprechenden zwei Zeilen ausdokumentiert.)
Kurioserweise wird nur das ganz unterste Label angezeigt

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
private void btnVerarbeiten_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.WaitCursor;
            
            if (listBox1.Items.Count != 0)
            { 
                //initialisiere Statusbar
                progressBar.Step = 100 / listBox1.Items.Count;
                progressBar.Value = 0;
               txtStatus.Text = "Bitte warten...";       // Das hier wird niemals angezeigt


                // Wenn der Ordner nicht existiert wird er neu angelegt.
                if (!Directory.Exists(this.txtZielVerzeichnis.Text)) { Directory.CreateDirectory(this.txtZielVerzeichnis.Text); }  

                for (int currentImage = 0; currentImage < listBox1.Items.Count; currentImage++)
                {
                    string sThumbName;

                    listBox1.SelectedIndex = currentImage;
                    //Dateinamen ermitteln
                    string[] sTmpPathSplit = listBox1.Text.Split(System.IO.Path.DirectorySeparatorChar);
                    sThumbName = "scaled-" + sTmpPathSplit[sTmpPathSplit.Length - 1];
                    txtStatus.Text = sThumbName;              // Das hier wird auch niemals angezeigt
                    GenerateScaledImage(listBox1.Text, this.txtZielVerzeichnis.Text, sThumbName, System.Drawing.Imaging.ImageFormat.Jpeg);
                    progressBar.Value += progressBar.Step;

                }

                txtStatus.Text = "Verarbeitung abgeschlossen.";  // Dieses wird richtig angezeigt
                progressBar.Value = 100;

            }
            this.btnVerarbeiten.Text = "Bilder verarbeiten";   
            this.Cursor = Cursors.Default;
        }


Vielleicht habt ihr ja eine Lösung.

mfg,
ayin


Zuletzt bearbeitet von ayin am Sa 04.10.08 20:30, insgesamt 1-mal bearbeitet
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 04.10.08 19:40 
Hallo und :welcome:

ein "Fehler" im Forum ist die falsche Markierung: Bitte unter Bereiche C# benutzen statt "allg. Code"; das kannst Du auch nachträglich in Deinem Beitrag ändern.

Dann ist die Problembeschreibung nicht korrekt: Das Label wird offensichtlich angezeigt, aber nicht mit dem von Dir erwarteten Text.

Der eigentliche Fehler liegt in Deinem Ablauf: In der Schleife änderst Du den Text, sorgst aber nicht für sofortige Aktualisierung. Nach der Schleife wird der Text wieder geändert; dann ist die Ereignisbearbeitung abgeschlossen, und die Anzeige wird (automatisch) aktualisiert.

Vorschlag: Die Änderung des Textes erfolgt vor Beginn der Schleife; dann wird Application.DoEvents() eingefügt. (Das ist nicht die beste, aber einfachste Lösung.)

Gruß Jürgen
ayin Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 04.10.08 19:46 
Hallo!

Danke erstmals für deine Antwort.

Zitat:
ein "Fehler" im Forum ist die falsche Markierung:

Ich glaube ich stehe auf der Leitung und weis nicht was du damit meinst.

Zitat:
Dann ist die Problembeschreibung nicht korrekt: Das Label wird offensichtlich angezeigt, aber nicht mit dem von Dir erwarteten Text.

Hm, eigentlich wird es nur einmal angezeigt anonsten ist es leer.

Zitat:

Der eigentliche Fehler liegt in Deinem Ablauf: In der Schleife änderst Du den Text, sorgst aber nicht für sofortige Aktualisierung. Nach der Schleife wird der Text wieder geändert; dann ist die Ereignisbearbeitung abgeschlossen, und die Anzeige wird (automatisch) aktualisiert.

Also wenn ich das richtig verstehe, kann es nur einmal angezeigt werden. Deswegen wird es auch vor der Schleife nicht angezeigt, weil das Ereignis noch nicht vollendet ist?

Zitat:

Die Änderung des Textes erfolgt vor Beginn der Schleife; dann wird Application.DoEvents() eingefügt. (Das ist nicht die beste, aber einfachste Lösung.)

Ich bin ja kein Profiprogrammierer sondern mache ich das bei mir nur aus Hobby, daher ist mir dieser Lösungsweg sehr recht.
Ich werde das sogleich ausprobieren und bedanke mich.

Edit: Habe meinen Code damit aktualisiert und es klappt einwandfrei. Recht herzlichen Dank.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 04.10.08 20:09 
user profile iconayin hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
ein "Fehler" im Forum ist die falsche Markierung:

Ich glaube ich stehe auf der Leitung und weis nicht was du damit meinst.

Du hast Deinen Code markiert und als "allg. Code" gekennzeichnet. Wenn Du dafür C# gewählt hättest, wäre der Code noch besser lesbar geworden.

Alles andere hast Du zumindest im wesentlichen richtig verstanden und umgesetzt. Jürgen
ayin Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 04.10.08 20:32 
Ach, jetzt weis ich was du meinst: Das Codesegment war falsch gekennzeichnet betreffend dem Syntaxhighlighting. Habs nun ausgebessert, habs zuerst nicht gleich gefunden wo sich das versteckt.