滚动图片框(Scrolling PictureBox)

2019-10-21 13:20发布

我试图让被绘制树形像一个应用程序这一块 。

所以我加了PictureBox的WinForm的,并开始,我要像写在这段代码的图片所有标签:

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

但问题是,我有很多的标签,因此它在800×600像素只写其中的几个。 我想添加滚动条,但它并没有在所有的工作。 它的工作原理,只有当我设置图像以PictureBox

是否有任何其他的方式,带或不带PictureBox

Answer 1:

图片框是一个非常简单的控制,这是唯一的好显示图片。 在一个功能它没有你需要的是滚动内容的能力。 所以,不要使用它。

创建自己的控件是的WinForms非常简单。 一个基本的出发点是用面板中,支持滚动控制开始,并从中获得自己的类,所以你定制以适合的任务。 添加一个新类到您的项目并粘贴如下所示的代码。 编译。 从工具箱中顶部的新控件到窗体。 注意:您如何设置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);
    }
}


文章来源: Scrolling PictureBox