Laden...

Mehrere Progressbars anhand ihrer Indexnummer ansprechen

Erstellt von 1mannlan vor 13 Jahren Letzter Beitrag vor 13 Jahren 989 Views
Thema geschlossen
1
1mannlan Themenstarter:in
88 Beiträge seit 2009
vor 13 Jahren
Mehrere Progressbars anhand ihrer Indexnummer ansprechen

Hi,

nachdem ich nicht genau weiß was ich suchen soll und nichts richtig brauchbares gefunden habe poste ich hier.
Problem ist Folgendes:

Ich habe mir eine Methode geschrieben die immer eine Progressbar und ein Label Updaten soll. Nun übergebe ich an die Methode immer eine Zahl, z.B. 1.
Ich schaffe es jetzt schon an label1 etwas zu übergeben etwa so:

FindControlByName("label" + WtsNummer).Text = "WTS" + WtsNummer.ToString() + ": " + Var.ToString() + " Mb";

Soweit sogut, jetzt habe ich das ganze mit einer Progressbar versucht, jedoch fehlen einfach die Attribute ".Value". Dachte ich mir ich mach es mit einer foreach schleife:

   

            foreach (ProgressBar pb in this.Controls)
            {
                pb.Value = 812; //Beispielwert
            }


weiter unten:

        private Control FindControlByName(string name)
        {
            foreach (Control c in this.Controls) //assuming this is a Form
            {
                if (c.Name == name)
                    return c; //found
            }
            return null; //not found
        }

Ich kriege zwar keinen Fehler ausgespuckt aber das Programm hängt einfach in der Schleife so wies scheint und läuft nicht weiter.
Gibt es vielleicht eine andere bessere Möglichkeit?
Oder was muss ich machen das das ganze funktioniert?

Danke im Vorraus!

Gelöschter Account
vor 13 Jahren

Erstmal ist der Ansatz mist 😃

Siehe auch: [FAQ] Variablennamen zur Laufzeit zusammensetzen

Am besten ist, du merkst dir die zusammengehörenden Label und Progressbars in einer Struktur, welche du dann in ein Array oder List einfügst. Deine arbeiten erledigst du dann über die liste oder das Array.

1
1mannlan Themenstarter:in
88 Beiträge seit 2009
vor 13 Jahren

Verstehe ich das richtig?

Oben:

     
        List<ProgressBar> pbs = new List<ProgressBar>();

weiter unten:

            foreach (ProgressBar pgbs in this.Controls)
            {
                if(pgbs.Name.Contains("progressBar"))
                {
                    pbs.Add(pgbs);
                }
            }

Allein das einsortieren klappt schon wieder nicht, muss ich die namen manuell angeben? Damit müsste ich ja wieder alles einzeln schreiben was ein riesen aufwand wär.

Gelöschter Account
vor 13 Jahren

Verstehe ich das richtig?

Nein 😃

Die Liste bildest du im Konstruktor z.b... du hast ja schon die Controls soweit ich es verstehe.

Bedenke die anmerkung mit der Struktur, damit du die Assoziation von Label und Progressbar hast. Diese Struktur kann dann auch einen Identifizierer haben (nummer oder string), womit du dann immer weißt, welche Struktur du nun aus der Liste benötigst.

1
1mannlan Themenstarter:in
88 Beiträge seit 2009
vor 13 Jahren

Also Label und Progressbar müssen bzw. sollen nicht zusammen hängen, denn sie müssen auch unabhängig voneinander ansprechbar sein.
Kannst du das noch etwas genauer erläutern und gibt es keine Möglichkeit das zur Laufzeit zu machen?

Gelöschter Account
vor 13 Jahren

Also Label und Progressbar müssen bzw. sollen nicht zusammen hängen, denn sie müssen auch unabhängig voneinander ansprechbar sein.

Wenn du sie Logisch gruppierst, dann heißt es nciht das man sie nicht mehr separat ansprechen kann.

gibt es keine Möglichkeit das zur Laufzeit zu machen?

Listen sind veränderbar... Daher kannst du das natürlich machen.

Kannst du das noch etwas genauer erläutern

Was genau verstehst du nicht?

1
1mannlan Themenstarter:in
88 Beiträge seit 2009
vor 13 Jahren

Mein Problem ist das ich nicht verstehe wie ich die Progressbars in die Liste bekommen soll, was für ein Typ soll es sein? Wie oben geschrieben eine Liste alá so?:

List<ProgressBar> pbs = new List<ProgressBar>();
Gelöschter Account
vor 13 Jahren

Siehe:

Am besten ist, du merkst dir die zusammengehörenden Label und Progressbars in einer Struktur

Also eher so:


List<MyStruct> ...

wobei:


struct MyStruct
{
Progressbar p;
Label l
}
1
1mannlan Themenstarter:in
88 Beiträge seit 2009
vor 13 Jahren

Nun will ich aber, wenn richtig verstanden nicht unte immer sowas wie Progressbar 1
Progressbar 2 usw. schreiben müssen.
Ich hab dann bis jetzt:
Oben:


        List<Progressbars> pgs = new List<Progressbars>();

und ganz unten:

        struct Progressbars
        {
            ProgressBar p;            
        }

Vielleicht stell ich mich nur zu blöd an, aber wie kriege ich jetzt alle vorhandenen (keine feste anzahl) an Progressbars in die Liste?

Gelöschter Account
vor 13 Jahren

aber wie kriege ich jetzt alle vorhandenen (keine feste anzahl) an Progressbars in die Liste?

Dort wo du die Progressbars erzeugst... dort kannst du sie auch in die liste geben... im übrigen macht dein code keinen sinn.. ich dachte das label gehört auch dazu?

und ja, du bruachst irgendwo eine unterscheidung der progressbars.. sonst weißt du ja nicht, welche du gerade verändern möchtest. Da bietet sich die Name Property des Controls an oder aber bei der Struct basierten Lösung eben ein zusätzliches Feld.

Thema geschlossen