滚动图片框

Scrolling PictureBox

我正在尝试制作一个绘制树状图的应用程序,例如 this one

所以我在 winform 中添加了一个 PictureBox,首先,我想用以下代码写下图片中的所有标签:

foreach (var line1 in lines)
{
    i++;
    gpx.DrawString(line1, myFont, Brushes.Green, new PointF(2, 10 * i));
}

但问题是我有很多标签,所以它在 800x600 像素上只写了其中的几个。我想添加滚动条,但根本不起作用。它仅在我将图像设置为 PictureBox.

时有效

有没有其他方法,有或没有PictureBox

PictureBox是一个很简单的控件,只显示一张图片就好了。它没有您需要的一项功能是滚动内容的能力。所以不要用它。

在 Winforms 中创建自己的控件非常简单。一个基本的起点是从支持滚动的控件 Panel 开始,并为它派生您自己的 class,以便您自定义它以适合任务。向您的项目添加一个新的 class 并粘贴如下所示的代码。编译。将工具箱顶部的新控件拖放到窗体上。请注意如何使用设计器或您的代码设置 Lines 属性。使用 Paint 事件绘制树状图。或者扩展class中的OnPaint()方法,想怎么玩就怎么玩。

using System;
using System.Drawing;
using System.Windows.Forms;

class DendrogramViewer : Panel {
    public DendrogramViewer() {
        this.DoubleBuffered = this.ResizeRedraw = true;
        this.BackColor = Color.FromKnownColor(KnownColor.Window);
    }

    public override System.Drawing.Font Font {
        get { return base.Font; }
        set { base.Font = value; setSize(); }
    }

    private int lines;
    public int Lines {
        get { return lines; }
        set { lines = value; setSize(); }
    }

    private void setSize() {
        var minheight = this.Font.Height * lines;
        this.AutoScrollMinSize = new Size(0, minheight);
    }

    protected override void OnPaint(PaintEventArgs e) {
        e.Graphics.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
        base.OnPaint(e);
    }
}