Autor Beitrag
bfmeb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Mi 01.07.09 14:12 
Hallo liebe Community!

Ich habe nochmal ein Problem mit meiner ProgressBar!
Ich lege Maximum und Minimum fest, dabei ist es nicht relevant das sich der Balken in Abhängigkeit des Fortschritts füllt, sondern er soll die 5 sec überbrücken die mein Tool zum konvertieren braucht. Damit der Benutzer nicht denkt es sei abgeschmiert.

Hier der Code meines Konvertierbuttons:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  private void ConvertRun_Click(object sender, EventArgs e)
        {
            if (PathOut.Text == "")
                MessageBox.Show("Bitte einen Zielpfad angeben!");
            ElsterMoRISMapper m = new ElsterMoRISMapper();
            ProgressBar.Maximum = 100;
            ProgressBar.Minimum = 0;
            m.Convert(inputFilename, outputFilename);
            if (m.Convert(inputFilename, outputFilename))
            {
                MessageBox.Show("Konvertierung erfolgreich abgeschlossen!");
            }
            else
            {
                MessageBox.Show("Konvertierung fehlerhaft! Überprüfen Sie Ihre Eingaben!");          
            }    
        }


Wo lege ich jetzt die Steps fest, es soll bestimmte Punkte geben wo sich der Balken um den Wert 20 erhöht, danke!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 01.07.09 14:17 
Das musst du in Convert die Progressbar ansteuern. Das geht via "Callback", d.h. dass du die dafür aufzurufende Methode an Convert mitgibst. Das geht in C# mit Delegaten:
msdn.microsoft.com/d...ibrary/ms173172.aspx
bfmeb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Mi 01.07.09 14:29 
Also muss ich mir jetzt in meiner Klasse die den Konvertierungsvorgang durchführt ein Deleganten bauen, um mit diesen die ProgressBar anzusteuern? Ich versteh das noch nicht 100% aber ich hab erstmal ein Ansatz Danke
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 01.07.09 14:59 
Im Grunde ist das nicht weiter schwer. So mal schnell getippt:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
public partial class Form1 : Form
{
    ...

    public void UpdateProgress(int Value)
    {
        progressBar1.Value = Value;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        String MyString = "testabcdefgh";
        progressBar1.Maximum = MyString.Length;
        // Delegat erstellen
        UpdateDelegate DoUpdate = UpdateProgress;
        // Convert aufrufen und Delegaten übergeben
        new ExampleConverter().Convert(MyString, DoUpdate);
    }
...
Und in der anderen Datei:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
public delegate void UpdateDelegate(int Value); // Delegat deklarieren, also wie die Delegatfunktion aussieht

public class ExampleConverter
{
    public String Convert(String a, UpdateDelegate test)
    {
        for (int i = 0; i < a.Length; i++)
        {
            test(i + 1); // hier wird der Delegate als Callback aufgerufen
            Thread.Sleep(200);
        }
        return a;
    }
}
Alternativ mit anonymer Methode:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
    private void button1_Click(object sender, EventArgs e)
    {
        progressBar1.Maximum = 4;
        new ExampleConverter().Convert("test",
            delegate(int Value) { progressBar1.Value = Value; });
    }
bfmeb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Mi 01.07.09 15:15 
Okay Danke vielmals