我试图让被绘制树形像一个应用程序这一块 。
所以我加了PictureBox
的WinForm的,并开始,我要像写在这段代码的图片所有标签:
foreach (var line1 in lines)
{
i++;
gpx.DrawString(line1, myFont, Brushes.Green, new PointF(2, 10 * i));
}
但问题是,我有很多的标签,因此它在800×600像素只写其中的几个。 我想添加滚动条,但它并没有在所有的工作。 它的工作原理,只有当我设置图像以PictureBox
。
是否有任何其他的方式,带或不带PictureBox
?
图片框是一个非常简单的控制,这是唯一的好显示图片。 在一个功能它没有你需要的是滚动内容的能力。 所以,不要使用它。
创建自己的控件是的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);
}
}