2016-11-29 3 views
0

Ich habe eine Windows Form-Anwendung, die acht separate Fortschrittsbalken für acht unabhängige Aufgaben hat (progressBar0 - progressBar7). Ich möchte diese zu einer Liste in meinem Code hinzufügen, damit ich sie durchlaufen kann.Winform Fortschrittsbalken zu einer Liste hinzufügen

erkläre ich die Liste:

List<Control> progressBar = new List<Control>(); 

Jetzt iterieren ich meine Kontrollen durch und fügen Sie diejenigen, die "progressBar" in ihrem Namen enthalten:

foreach (Control control in Controls) 
{ 
    if (control.Name.Contains("progressBar")) { progressBar.Add(control); } 
} 

So weit so gut. Aber ich kann nicht die .Value Eigenschaft:

progressBar[0].Value == 100; <-- this doesn't work 

Die oben wird nicht kompiliert und gibt Fehler „Control keine Definition für‚Wert‘enthalten“. Seltsamerweise kann ich, wenn ich intellisense verwende, einen Drilldown in progressBar durchführen und den Wert-Parameter finden. Aber aus irgendeinem Grund kann ich nicht programmatisch darauf zugreifen, und ich kann es auch nicht von der Beobachtungsliste abrufen.

kann ich den Wert durch AccessibilityObject zugreifen, sondern ist im String-Format und wird ärgerlich, mit zu arbeiten:

progressBar[0].AccessibilityObject.Value = "100%" <-- this works fine 

Wenn ich jeden progressBar direkt zugreifen können, ist alles in Ordnung:

progressBar0.Value = 100; <-- this works fine 

Was mache ich falsch?

+2

'foreach (ProgressBar bar in Controls.OfType ())' –

Antwort

1

Sie verwenden eine Liste von Control, die der Basistyp für die gesamte Steuerung ist. Value ist eine Eigenschaft, die nur für einige der Steuerelemente spezifisch ist, in diesem Fall ProgressBar.

Sie müssen es einen ProgressBar würfen

var progressBars = new List<ProgressBar>(); 

foreach (var control in Controls) 
{ 
    // this ensure the type is a ProgressBar, unlike name, it cant be randomly assigned 
    if (control is ProgressBar) 
    { 
     // a cast is needed here 
     progressBars.Add(control as ProgressBar); 
    } 
} 

progressBars[0].Value = 100; 
+0

Genau das, was ich brauchte, fehlte die Besetzung. – masospaghetti

Verwandte Themen