0

我正在尝试在 c# 中进行宏替换。其实我正在努力学习c#。我在视觉狐狸经验丰富。

无论如何,这是我需要的:

假设我正在尝试以编程方式添加新控件:

ProgressBar progressBar1 = new ProgressBar();
progressBar1.Size = new System.Drawing.Size(516, 23);
progressBar1.Location = new Point(10, 36);
groupBox4.Controls.Add(progressBar1);

现在我需要知道一种方法如何替换控件的名称(progressBar1)并获取字符串变量的名称,以便我可以使用 for 语句创建多个进度条?

有什么想法吗?

4

2 回答 2

1

您必须将代码放在 for 循环中以创建多个进度条实例,如果您想保留项目的引用,您可以将它们存储到字典中,例如:

Dictionary<int, ProgressBar> progressBars = new Dictionary<int, ProgressBar>();

for(int i = 0; i < someValue; i++) {
ProgressBar progressBar = new ProgressBar();
progressBar.Size = new System.Drawing.Size(516, 23);
progressBar.Location = new Point(10, 36);
groupBox4.Controls.Add(progressBar);
progressBars.Add(i, progressBar);
}

因此,现在您可以通过索引(或您定义为键的其他内容)在字典中查找所需的进度条...

使用索引 3(通过索引器)取回进度条的示例:

ProgressBar bar = progressBars[3]; 
bar.Value = //Assign some value
于 2012-08-05T15:56:28.187 回答
1

progressBar1 不是控件的名称。是用于与 ProgressBar 的当前实例一起使用的 ProgressBar 类型的变量的名称。

从 Control 派生的每个类都有一个称为字符串类型名称的属性。

int xPos = 10;
int yPos = 36;

// Add 10 progressbars to the groupbox control collection
for(x = 0; x < 10; x++)
{
    yPos = yPos + (x * 30);
    ProgressBar progressBar1 = new ProgressBar(); 
    progressBar1.Name = "pgb" + x.ToString();
    progressBar1.Size = new System.Drawing.Size(516, 23); 
    progressBar1.Location = new Point(10, yPos); 
    groupBox4.Controls.Add(progressBar1); 
}

要检索您添加的进度条之一,您可以简单地使用组框的控件对象集合。

ProgresBar pb = groubBox4.Controls["pgb1"] as ProgressBar;
pb.Increment(1);
于 2012-08-05T15:57:14.137 回答