Windows 窗体 C# 绘制整个可滚动面板
本文关键字:滚动 窗体 绘制 Windows | 更新日期: 2023-09-27 18:33:12
我在Windows Forms C#中的可滚动面板有问题。
我的情况我有一个带有选项卡控件的窗体。在其中一个选项卡中,我有一个面板,可以填充整个选项卡并且可以滚动。在运行时,我用大约 60 个其他面板填充此面板,每个添加的面板中都有 6 张图片。这导致我可以向下滚动的 1 个大面板。
我的问题现在在我的坏电脑上绘制这些子面板中的 1 个大约需要 0.2 秒,这很好且可重新定义,但我有一个问题,它只绘制主面板中当前可见的内容。即使我让主面板加载 1 分钟,他仍然只绘制前几个子面板,如果我向下滚动,他必须绘制其余部分。如果我再次向上滚动,一切都是斯穆特,所以看起来它正在存储曾经绘制过的所有内容。我想要一种行为,他基本上在开始时绘制整个主面板,然后滚动流畅。
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);
}
}
激活表单后,加载一个面板,剩下的您可以在后台工作线程中加载并调用。