2016-02-03 60 views
1

我在Windows窗體C#中的可滾動面板有問題。Windows窗體C#繪製整個可滾動面板

我的情況 我有一個tabControl的窗體。 在我的選項卡中有一個填充整個選項卡並可滾動的面板。 在運行時,我在每個添加的面板中使用約60個其他面板和6張圖片填充此面板。這導致我可以向下滾動的一個大面板。

我的問題 現在畫這些子板的1需要約0.2秒,我的壞的電腦是很好,reaosnable但我有它只是繪製目前在主面板中看到的東西的問題。 即使我讓主面板加載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

它應該繪製所有負載。你能告訴我們代碼嗎? – Takarii

+0

我添加了一些代碼 –

+0

PictureBox沒有使繪圖平滑。完成這項工作完全取決於你的工作效率。圖像的像素格式非常重要,只有32bppPArgb是有效的,因爲它與任何現代機器上的視頻幀緩衝格式兼容。任何其他格式呈現〜10倍慢。而圖像的大小很重要,不得不重新調整圖像以適應picturebox非常昂貴,並且一遍又一遍地發生。一定要用最佳的像素格式和正確的尺寸創建自己的位圖。 –

回答

0

激活後的形式,加載一個面板,剩下的你可以加載後臺worker和Invoke。

+0

Sry,但我不知道你想告訴我什麼。 你的意思是我應該加載什麼面板? 開始時,可​​滾動大面板中總是會顯示5個小面板 –

相關問題