更改动态创建的进度条的值

时间:2015-11-26 11:32:32

标签: c#

我在TableLayoutPanel中动态创建了一堆文本框,标签和进度条 这些我想从Parallel.Foreach线程控制。 我知道每个控件的名称,所以我可以这样访问它们:

Table1.Invoke(
      new MethodInvoker(delegate() { 
                Table1.Controls[<name>].Text = "text to write"; 
      }));

但是当我尝试更改进度条的值或者我尝试更改样式(blocks-&gt; marquee)时,它不知道.Style选项的.Value。

Table1.Invoke(
      new MethodInvoker(delegate() {
           Table1.Controls[<progressbar_name>].Value = <percentage>; 
      }));

Table1.Invoke(
      new MethodInvoker(delegate() { 
         Table1.Controls[<progressbar_name>].Style = ProgressBarStyle.Marquee; 
      }));

它给出了一个错误,即.Value和.Style不能存在于当前上下文中。

3 个答案:

答案 0 :(得分:0)

您可能希望将Table1.Controls[<progressbar_name>]投射到ProgressBar类。

答案 1 :(得分:0)

您需要转换控件才能使用ProgressBar属性。

试试这个:

public async Task<IEnumerable<DiagnosticsInfo>> Get()
{
    var task1 = GetDiagnosticsInfo1();
    var task2 = GetDiagnosticsInfo2();
    var task3 = GetDiagnosticsInfo3();

    return await Task.WhenAll(task1, task2, task3);
}

很高兴为您服务!

答案 2 :(得分:0)

当您引用Table1.Controls[<progressbar_name>]时,这被解释为Control,而不是ProgressBarControl var progBar = Table1.Controls[<progressbar_name>] as ProgressBar; if(progBar != null) { progBar.Value = = <percentage>; }

一个简单的解决方法:

 char str[5] = "ankit";

严格来说,if结构不一定是必要的,但在某些情况下可能会跳过尝试设置值而避免异常(例如,如果表中的控件未正确加载或实例化)。