2012-01-04 7 views
2

イベント内のフォームにe.graphics.DrawLine()などで内容を描画します。これまではフォームsize(私の要素のサイズ変更)に基づいて描画していましたが、今は私が望むほど大きな描画をしたいと思います。可視領域外に描画すると(オブジェクトが描画される場所は実行時に動的に決定されます)私は、ユーザーがスクロールバーを使用して、私が描くコンテンツ全体の一部を見ることを望みます。GDI +で内容を描画するときに自動スクロールバーを使用する方法

私はAutoScrollingを有効にしましたが、そのフォームにコントロールがない場合、どのように役立つかわかりません。

私はそれをどのように行うことができますか?

答えて

6

AutoScrollMinSizeプロパティを目的のサイズに設定するだけです。フォームのClientSizeがこの値より小さい場合、スクロールバーが自動的に表示されます。また、あなたはこのように、スクロール位置に応じて描くものをオフセットする必要があります:

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     this.AutoScroll = true; 
     this.AutoScrollMinSize = new Size(3000, 1000); 
     this.ResizeRedraw = true; 
    } 
    protected override void OnPaint(PaintEventArgs e) { 
     e.Graphics.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y); 
     e.Graphics.DrawLine(Pens.Black, 0, 0, 3000, 1000); 
     base.OnPaint(e); 
    } 
} 
+0

私はこれを行うことができます方法:フォームのサイズは、デフォルトである×1000 3000しかし、私は、この地域の外に何かを描くとき、​​スクロールバー私はそこに描いた形にスクロールすることができます(3500x1200で言うことができます)? –

+0

私は自分自身を明確にすることができませんでした、それは私の間違いです。私は "...ユーザーがそこに描かれた形にスクロールすることができます"を意味しました。とにかくあなたが言ったように、これは別の質問であり、同様のもの(まったく同じではない)がすでに尋ねられており、その答えが私の問題を解決することがわかった:http://stackoverflow.com/questions/2657753/gdi-problem-描画に遭遇した複数の長方形の上にフォームのおかげで助けてください。 –

+0

Mr. HansPassant、 'e.Graphics.TranslateTransform(this.AutoScrollPosition.X、this.AutoScrollPosition.Y); 'でスクロールするときに、私はあなたの古いちらつきの問題を解決しました。 –

1

まずあなたが最良の方法は、コンテンツに合わせてPanelと再サイズPanelに物事を描くことであるよりも、あなたが描画しているというフォームのAutoScroll = true;を設定する必要があり、フォームが自動的にスクロールのショーになるよりも、内部drawledバー。

関連する問題