2010-11-29 8 views
20

Ich möchte in der Lage sein, ein Panel oder ähnliches zu verwenden, um Grafiken auf Winform zu zeichnen. Ich sehe nichts in Bezug auf das Hinzufügen von Bildlaufleisten, wenn die Grafik größer als das Steuerelement wird?C# Panel zum Zeichnen von Grafiken und Scrollen

Ist es möglich, dies mit einem Panel zu tun, oder gibt es ein ähnliches Steuerelement, das es erlaubt?

Danke.

+2

WARUM würde jemand dies ablehnen? Es ist eine vollkommen vernünftige Frage? –

Antwort

18

Setzen Sie die AutoScroll-Eigenschaft auf true und die AutoScrollMinSize-Eigenschaft auf die Größe des Bilds. Die Bildlaufleisten erscheinen jetzt automatisch, wenn das Bild zu groß ist.

Sie möchten Ihre eigene Klasse von Panel erben, sodass Sie die DoubleBuffered-Eigenschaft im Konstruktor auf true festlegen können. Flimmern wäre sonst auffällig. Einige Beispiel-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); 
    } 
} 
+0

Danke Hans. Ich werde es jetzt versuchen. –

+0

Sorry Hans .... das Bild, das in das Panel passt, wird dynamisch zur Laufzeit erstellt. Die Grafiken werden abhängig von bestimmten Parametern erstellt. Würde das noch funktionieren? –

+1

Yah, weisen Sie die Image-Eigenschaft zu. Funktioniert sowohl zur Designzeit als auch zur Laufzeit. –

0

Ich bin nicht 100% sicher, was Sie erreichen möchten, aber hier ist eine ähnliche SO question, die Ihnen helfen könnte.

Sie könnten auch versuchen, eine PictureBox verwenden, die Sie manuell ändern würden, wenn die Grafik größer wird. Setzen Sie dann Ihr Formular AutoScroll auf True.

+0

Ich würde die Bildbox nicht als Leinwand zum Zeichnen verwenden. Die Bildbox dient nur zum Anzeigen von Bildern. Siehe Bob Powells Artikel zu diesem genauen Problem. – Pedery