c # панель для рисования графики и прокрутки - PullRequest
21 голосов
/ 29 ноября 2010

Я хочу использовать панель или аналогичные элементы для рисования графики в Winform. Кажется, я не вижу ничего относительно добавления полос прокрутки, если графика становится больше, чем элемент управления?

Возможно ли это сделать с помощью панели или есть аналогичный элемент управления, который позволит это?

Спасибо.

Ответы [ 2 ]

19 голосов
/ 29 ноября 2010

Установите для свойства 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 голосов
/ 29 ноября 2010

Я не уверен на 100%, чего вы пытаетесь достичь, но вот похожий ТАК вопрос , который может вам помочь.

Вы также можете попробовать использовать PictureBox , чтобы вручную изменять его размер по мере увеличения графики. Затем установите для вашей формы AutoScroll значение true.

...