更改动态创建的进度条的值
本文关键字:动态 创建 | 更新日期: 2023-09-27 18:24:26
我在TableLayoutPanel
中动态创建了一堆文本框、标签和进度条这些我想从Parallel.Foreach
线程控制。我知道每个控件的名称,所以我可以这样访问它们:
Table1.Invoke(
new MethodInvoker(delegate() {
Table1.Controls[<name>].Text = "text to write";
}));
但是,当我尝试更改进度条的值或尝试更改样式(blocks->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。
您可能希望将Table1.Controls[<progressbar_name>]
强制转换为ProgressBar
类。
您需要强制转换控件才能使用ProgressBar属性。
试试这个:
Table1.Invoke(new MethodInvoker(delegate()
{
((ProgressBar)Table1.Controls[<progressbar_name>]).Value = <percentage>;
((ProgressBar)Table1.Controls[<progressbar_name>]).Style = ProgressBarStyle.Marquee;
}));
很高兴能帮助你!
当您引用Table1.Controls[<progressbar_name>]
时,它被解释为Control
,而不是ProgressBar
,后者恰好是Control
的子类。
一个简单的解决方案:
var progBar = Table1.Controls[<progressbar_name>] as ProgressBar;
if(progBar != null)
{
progBar.Value = = <percentage>;
}
严格来说,if结构不应该是必要的,但在某些情况下,可以通过跳过设置值的尝试来避免异常(例如,在表中的控件没有正确加载或实例化的情况下)。