Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Panel for drawing graphics and scrolling

Tags:

I want to be able to use a Panel or similar to draw graphics onto a Winform. I cannot seem to see anything regarding adding scrollbars if the graphics become larger than the control?

Is it possible to do this with a Panel or is there a similar control that will allow it?

like image 213
Darren Young Avatar asked Nov 29 '10 15:11

Darren Young


1 Answers

Set the AutoScroll property to true and the AutoScrollMinSize property to the size of the image. The scrollbars will now automatically appear when the image is too large.

You'll want to inherit your own class from Panel so that you can set the DoubleBuffered property to true in the constructor. Flicker would be noticeable otherwise. Some sample code:

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);     } } 
like image 158
Hans Passant Avatar answered Sep 18 '22 15:09

Hans Passant