Подтвердить что ты не робот

Панель С# для рисования графики и прокрутки

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

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

Спасибо.

4b9b3361

Ответ 1

Установите для свойства 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);
    }
}

Ответ 2

Я не уверен на 100%, что вы пытаетесь выполнить, но вот аналогичный вопрос SO, который может вам помочь.

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