2010-04-09 3 views
0

C# 3.0. .net framework 3.5 Я рисую (используя метод draw в графическом классе) много твердых прямоугольников на окнах формы вертикально. Форма начинается с 500 x 500 px, а прямоугольники выводятся только во время выполнения после загрузки данных из сети, а количество прямоугольников зависит от загрузки, поэтому я не знаю ее заранее.Winform не прокручивается при рисовании объектов на нем

Таким образом, только несколько прямоугольников нарисованы по мере того, как размер формы фиксирован. Итак, я googled/Binged (если кто-то не предложит мне это сделать) и нашел несколько советов, но они не работают в этом случае - например, для того, чтобы установить свойство AutoScroll в true или try double buffering. Я также попытался нарисовать список контроль и установить его свойство прокрутки и т. д., но без кубиков.

Я предполагаю, что нет возможности отображать, скажем, 200 прямоугольников по вертикали в форме окна с использованием рисования. Мне нужно другое решение ... любые идеи, пожалуйста.

Может быть, список изображений, а затем заполнить каждый квадрат с сплошным цветом?

Благодаря

+0

Какое поведение вы пытаетесь получить? – SLaks

+0

Я хочу, чтобы все 200 прямоугольников рисовались по форме и просматривались с помощью прокрутки. – dezkev

+0

Другим подходом может быть подкачка входящих данных, тогда я могу отображать только 20 прямоугольников и не нужно беспокоиться о прокрутке. Теперь, чтобы выяснить, как страницы данных .... – dezkev

ответ

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); 
     } 
    } 
Смежные вопросы