2010-11-29 2 views
20

Я хочу иметь возможность использовать панель или подобное рисовать графику на Winform. Я не вижу ничего похожего на добавление полос прокрутки, если графика становится больше, чем контроль?Панель C# для рисования графики и прокрутки

Возможно ли это сделать с панелью или есть аналогичный элемент управления, который позволит это?

Спасибо.

+2

ПОЧЕМУ кто-нибудь мог бы понизить это? Это вполне разумный вопрос? – 2010-11-30 10:27:05

ответ

18

Установите для свойства AutoScroll значение true, а свойство AutoScrollMinSize - размер изображения. Теперь полосы прокрутки автоматически появятся, когда изображение слишком велико.

Вам нужно наследовать свой класс из Panel, чтобы вы могли установить для свойства DoubleBuffered значение true в конструкторе. В противном случае мерцание будет заметно. Некоторый пример кода:

using System; 
using System.Drawing; 
using System.Windows.Forms; 

class ImageBox : Panel { 
    public ImageBox() { 
     this.AutoScroll = true; 
     this.DoubleBuffered = true; 
    } 
    private Image mImage; 
    public Image Image { 
     get { return mImage; } 
     set { 
      mImage = value; 
      if (value == null) this.AutoScrollMinSize = new Size(0, 0); 
      else { 
       var size = value.Size; 
       using (var gr = this.CreateGraphics()) { 
        size.Width = (int)(size.Width * gr.DpiX/value.HorizontalResolution); 
        size.Height = (int)(size.Height * gr.DpiY/value.VerticalResolution); 
       } 
       this.AutoScrollMinSize = size; 
      } 
      this.Invalidate(); 
     } 
    } 
    protected override void OnPaint(PaintEventArgs e) { 
     e.Graphics.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y); 
     if (mImage != null) e.Graphics.DrawImage(mImage, 0, 0); 
     base.OnPaint(e); 
    } 
} 
+0

Спасибо Хансу. Я сейчас отдам это. – 2010-11-30 10:27:30

0

Я не уверен на 100%, что вы пытаетесь выполнить, но вот аналогичный SO question, который может вам помочь.

Вы также можете попробовать использовать PictureBox, чтобы вы вручную изменили свой размер по мере увеличения графики. Затем установите для вашей формы AutoScroll значение true.

+0

Я бы не использовал картинку в качестве холста для рисования. Картинка предназначена только для отображения изображений. См. Статью Боба Пауэлла относительно этой точной проблемы. – Pedery 2010-11-29 18:08:39

Смежные вопросы