将winform进度条添加到列表中

时间:2016-11-29 17:01:14

标签: c# list controls

我有一个Windows窗体应用程序,它有八个独立的进度条,用于八个独立的任务(progressBar0 - progressBar7)。我想将这些添加到我的代码中的列表中,以便我可以遍历它们。

我宣布清单:

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

现在我遍历我的控件并添加包含&#34; progressBar&#34;在他们的名字中:

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

到目前为止一切顺利。但是,我无法设置.Value属性:

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

以上不会编译并给出错误&#34; Control不包含&#39; Value&#39;&#34;的定义。奇怪的是,如果我使用intellisense,我可以深入到progressBar并找到Value参数。但出于某种原因,我无法以编程方式访问它,我也无法从监视列表中检索它。

我可以通过AccessibilityObject访问该值,但是是字符串格式,并且使用起来很烦人:

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

如果我直接访问每个progressBar,一切都很好:

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

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您正在使用Control列表,这是所有控件的基本类型。 Value是一个特定于某些控件的属性,在本例中为ProgressBar

您需要将其投射到ProgressBar

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;