2010-11-29 16 views
20

グラフィックスをWinformに描画するためにパネルなどを使いたいと考えています。グラフィックスがコントロールよりも大きくなった場合、スクロールバーを追加することはできません。グラフィックスとスクロールのためのC#パネル

これをパネルで行うことは可能ですか、それを可能にする同様のコントロールはありますか?

ありがとうございました。

+2

誰かがこれを暗記しますか?それは完全に合理的な質問ですか? –

答えて

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

ありがとうHans。私は今これを行こうと思います。 –

+0

Sans Hans ....パネルに収まる画像は、実行時に動的に作成されます。グラフィックスは、特定のパラメータに応じて作成されます。これはまだ動作しますか? –

+1

Yah、Imageプロパティを割り当てます。実行時の設計時にも同様に動作します。 –

0

あなたが達成しようとしていることを100%確信しているわけではありませんが、これはあなたに役立つかもしれない同様のSO questionです。

また、PictureBoxを使用すると、グラフィックが大きくなるにつれてサイズを手動で変更することもできます。次に、フォームAutoScrollをtrueに設定します。

+0

私は描画のキャンバスとしてピクチャボックスを使用しません。ピクチャーボックスは写真を表示するためのものです。この正確な問題に関するBob Powellの記事をご覧ください。 – Pedery

関連する問題