滚动图片框
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);
}
}
我正在尝试制作一个绘制树状图的应用程序,例如 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);
}
}