滚动PictureBox

时间:2015-01-07 10:28:21

标签: c# winforms scrollbar 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

1 个答案:

答案 0 :(得分:2)

PictureBox是一个非常简单的控件,它只是很好地显示图片。它没有你需要的一个功能是滚动内容的能力。所以不要使用它。

在Winforms中创建自己的控件非常简单。一个基本的出发点是从Panel开始,一个支持滚动的控件,并为它派生自己的类,以便您自定义它以适合任务。在项目中添加一个新类并粘贴下面显示的代码。编译。将新控件从工具箱顶部拖放到表单上。请注意如何使用设计器或代码设置Lines属性。使用Paint事件绘制树形图。或者在类中扩展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);
    }
}