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);
            }
        }

Windows 窗体 C# 绘制整个可滚动面板

激活表单后,加载一个面板,剩下的您可以在后台工作线程中加载并调用。