我正在尝试制作一个正在绘制像this one这样的树状图的应用程序。
所以我在winform中添加了一个PictureBox
,首先,我想用这段代码编写所有标签:
foreach (var line1 in lines)
{
i++;
gpx.DrawString(line1, myFont, Brushes.Green, new PointF(2, 10 * i));
}
但问题是我有很多标签,所以它只写了800x600像素中的一些。我想添加滚动条,但它根本不起作用。它仅在我将图像设置为PictureBox
时才有效。
有没有其他方式,有或没有PictureBox
?
答案 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);
}
}