web-dev-qa-db-ja.com

グラフィックの描画とスクロールのためのパネル

Panelなどを使用して、Winformにグラフィックを描画できるようにしたい。グラフィックがコントロールより大きくなると、スクロールバーの追加に関して何も表示されないように見えますか?

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

22
Darren Young

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);
    }
}
21
Hans Passant

私はあなたが何を達成しようとしているのか100%確信が持てませんが、これはあなたを助けるかもしれない同様の SO質問 です。

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

0
msergeant