我在Windows Forms C#中的可滚动面板有问题。
我的情况 我有一个带tabControl的表单。 在其中一个选项卡中,我有一个面板,可以填充整个选项卡并且可以滚动。 在运行时,我在每个添加的面板中用大约60个其他面板和6个图片填充该面板。这导致我可以向下滚动一个大面板。
我的问题 现在绘制这些子面板中的一个在我的坏电脑上花费大约0.2秒这很好并且可以重新使用但是我有一个问题,它只是绘制当前在主面板中可见的东西。 即使我让主面板加载1分钟,他仍然只绘制前几个子面板,如果我向下滚动,他必须绘制其余部分。 如果我再次向上滚动,一切都是平滑的,所以看起来它存储了一次绘制的所有东西。 我想abehaviour他在开始时基本上绘制整个主面板,然后滚动顺利。
PS:我不确定“绘图”是否是表格正在做的正确的词。 PPS:我知道这段代码并不完美,但我不是在抱怨性能问题,但我只是想了解这个加载是如何工作的 一些代码:
private void Form1_Load(object sender, EventArgs e) {
pnEverything.Controls.Clear();
int yPosition = 20;
for (int i = 1; i <= 48; i++) {
Panel panel = new Panel();
Label label = new Label();
if (i % 2 != 0) {
panel.Location = new Point(10, yPosition);
}
else {
panel.Location = new Point(this.Size.Width / 2 + 10, yPosition);
yPosition += this.Size.Width / 10;
}
panel.Size = new Size(this.Size.Width / 2 - 80, ((this.Size.Width / 2 - 80) - 90) / 6 + 40);
panel.Tag = i;
panel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
label.AutoSize = true;
label.Font = new Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
label.ForeColor = Color.Black;
label.Name = "lbLade" + i;
label.Location = new Point(panel.Width / 2 - label.Size.Width / 2, panel.Size.Height - 30);
label.Text = i.ToString();
panel.Controls.Add(label);
int xPosition = 30;
for (int j = 1; j <= 6; j++) {
MyPictureBox pb = new MyPictureBox();
pb.Location = new Point(xPosition, 10);
pb.Margin = new Padding(2);
pb.Name = "pbLade" + i + "Nummer" + j;
pb.Size = new Size((panel.Size.Width - 90) / 6, (panel.Size.Width - 90) / 6);
pb.SizeMode = PictureBoxSizeMode.StretchImage;
pb.Cursor = System.Windows.Forms.Cursors.Hand;
pb.Position.Lade = i;
pb.Position.Nummer = j;
xPosition += pb.Size.Width + 10;
pb.ImageLocation = @"Bilder\plus.png";
pb.Click += new EventHandler(pbAddCar_Click);
panel.Controls.Add(pb);
}
pnEverything.Controls.Add(panel);
}
}
答案 0 :(得分:0)
激活表单后,加载一个面板,剩下的就可以在后台工作程序和调用中加载。