【发布时间】:2016-06-29 07:51:50
【问题描述】:
我有一个以编程方式在其中添加面板的表单;
对于进入我的程序的每个任务,我添加一个标签和 面板的进度条在之前的 Y 位置添加了 30 像素 Y。
但是当面板有时想要向下滚动时滚动时, 位置成倍增加,而不是在它们的确切位置。
记住,我检查了 Y 位置并将其写入控制台,发现 Y 位置正常,但面板显示不正确
我认为问题出在面板绘制方法上, 但不知道如何解决。
问题是任务 26 应该在 25 之后出现,但位置不正确,尽管我看到控制台的位置是正确的。
添加控件的代码:
private static void AddTaskControls(int taskId)
{
Label lbl = new Label();
lbl = new Label();
lbl.Name = "lbl" + taskId.ToString();
lbl.Text = "Task " + taskId.ToString() + ":";
lbl.Width = 57;
lbl.Height = 13;
lbl.Location = new Point(0, 25 + (taskId) * 30);
ProgressBar pr = new ProgressBar();
pr = new ProgressBar();
pr.Name = "pr" + taskId.ToString();
pr.Width = 180;
pr.Height = 23;
pr.Location = new Point(50, 20 + (taskId) * 30);
Label lbl2 = new Label();
lbl2.Name = "lbl" + taskId.ToString() + "List";
lbl2.Text = "Starting " + taskId.ToString() + "";
lbl2.Width = 200;
lbl2.Height = 13;
lbl2.Location = new Point(230, 25 + (taskId) * 30);
//Console.WriteLine(lbl2.Location.Y + "taskid:"+taskId);
if (panel1.InvokeRequired)
{
AddTaskControllsCallback t = new AddTaskControllsCallback(AddTaskControls);
panel1.BeginInvoke(t, new object[] { taskId });
}
else
{
panel1.Controls.Add(lbl);
panel1.Controls.Add(pr);
panel1.Controls.Add(lbl2);
pr.BringToFront();
}
}
【问题讨论】:
-
@MickyD 我编辑了我的问题并添加了代码
-
@MickyD 不,我没有任何特殊图纸。只是您在上图中看到的控件。
-
那么,我应该如何解决这个问题?
-
我不能这样做,因为需要使用 InvokeRequired 从多个线程更新标签和进度条值