C# 更改在运行时添加到 winform 的控件的属性

C# Change properties of control added at runtime to winform

我需要向表单添加可变数量的进度条,然后根据需要更新它们。我可以很好地添加进度条,但找不到更新其属性的方法。

int pbCount = 0;
void AddProgressBar(int, pbX, int pbY, int initalValue) 
{
    pbCount++;
    ProgressBar MyBar = new ProgressBar();
    MyBar.Name = "MyBar" + pbCount.ToString();
    MyBar.Location = new System.Drawing.Point(pbX, pbY);
    MyBar.Width = 200;
    MyBar.Height = 20;
    MyBar.Minimum = 0;
    MyBar.Maximum = 100;
    MyBar.Value = initialValue;
    this.Controls.Add(MyBar);
}

那么如何更改给定进度条的值?

或者有没有更好的方法添加进度条以便稍后更新?

试试这个:

ProgressBar bar7 = this.Controls.OfType<ProgressBar>().FirstOrDefault( x => x.Name == "MyBar7" );

如果找不到 "MyBar7",它将 return 为空。

然后您可以根据需要更新属性。

另一种选择是将进度条也存储在 Dictionary< string, ProgressBar >;

这是一个使用 LinqPad 的例子:

它展示了如何向字典中添加一个新的 ProgressBar,以及如何从字典中获取它。

如果您想按索引访问进度条,您也可以只使用一个简单的数组。

Dictionary<string,ProgressBar> ProgressBars = new Dictionary<string,ProgressBar>();

void Main()
{
    ProgressBars["MyBar1"] = new ProgressBar();

    //... later on
    ProgressBar progressBar = ProgressBars["MyBar1"];
    progressBar.PerformStep();
    progressBar.Step = 77;

    progressBar.Step.Dump();

}