2010-04-09 58 views
0

C#3.0,.net framework 3.5 我正在繪製(在圖形類中使用繪製方法)垂直方向上的很多實體矩形。表單從500 x 500像素開始,矩形僅在網絡下載數據後在運行時繪製 - 並且矩形的數量取決於下載,所以我不知道它是什麼。Winform在繪製對象時沒有滾動

所以只繪製了幾個矩形,因爲表單的大小是固定的。 所以我用Google/Binged(恐怕有人建議我這樣做),並發現了一些技巧,但他們在這種情況下不起作用 - 比如將AutoScroll屬性設置爲true或嘗試雙緩衝。我還嘗試在列表框中繪製控制並設置它的滾動屬性等...但沒有骰子。

我猜是沒有辦法顯示,比如使用繪圖在窗體上垂直說200個矩形。我需要一些其他解決方案...請任何想法。

也許一個pictureboxes列表,然後用純色填充每個picturebox?

謝謝

+0

什麼行爲,你想獲得? – SLaks 2010-04-09 17:17:27

+0

我想要在窗體上繪製所有200個矩形並通過滾動查看。 – dezkev 2010-04-09 18:16:29

+0

另一種方法可以是分頁傳入數據,然後我可以只顯示20個矩形,不需要擔心滾動。 現在要弄清楚如何分頁數據.... – dezkev 2010-04-10 07:54:09

回答

6

您在繪製事件期間在窗體上繪製GDI +矩形?表單不知道你是否在剪輯空間外創建對象,因此不知道你需要滾動。

您需要向窗體中添加一個滾動條,然後計算滾動條的值\位置,並使用它來確定繪製事件時要繪製的矩形的哪一部分。這將涉及一些人工努力。您可以將它們全部繪製到適當大小的內存位圖中,然後在繪製時將其部分複製到表單中。

或者:

如果你想要的形式爲你做到這一點,創建一個自定義的矩形控制,並把這些表格上的200。由於它們是組件,並且具有寬度的具體高度,所以表單將知道它需要滾動,並且如果設置了自動滾動,則會這樣做。

它可以這樣簡單:

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      this.DoubleBuffered = true; 
      this.AutoScroll = true; 
      for (int i = 0; i < 100; i++) 
       this.Controls.Add(new Rectangle() { Top = i * 120, Left = 10 }); 

     } 
    } 

    public class Rectangle : Control 
    { 
     public Rectangle() 
     { 
      this.Width = 100; 
      this.Height = 100; 
     } 
     protected override void OnPaint(PaintEventArgs e) 
     { 
      e.Graphics.DrawRectangle(new Pen(Color.Black, 5), 0, 0, 100, 100); 
     } 
    }