在面板控件上绘图时如何在面板控件中制作水平条?
How to make a horizontal bar in a panel control when drawing on it?
我有一个面板,我需要在上面画一个水平图表。但有时图表对于面板来说可能太长,即使表格有最大尺寸。所以我想在面板上做一个水平条,让用户可以看到绘图中超出边界的剩余部分。
图表是这样的:
如您所见,图表超出了面板和表格的范围。我不知道该怎么做,所以我没有要显示的代码。那么如何使用基本方法来实现呢?
是的,解决方案非常基本,只要您要绘制的尺寸不超过 32k 像素宽度即可:
- 把你的
Panel
放在另一个里面。
- 外层
Panel
有AutoScroll=true
- inner 你画的地方有你画的尺寸。
- 您需要在
Paint
事件中绘图,无论如何都应该这样做 (!)
现在外部 Panel
显示水平滚动条,用户可以左右滚动并查看绘图的所有部分。
一种替代方法是添加一个虚拟控件,强制绘图 Panel
的 AutoScroll
正常工作,但我发现使用两个 Panels
更简洁。
注意:您应该使用 PictureBox
或至少使用双缓冲 Panel
子类以避免闪烁和撕裂:
class DrawPanel : Panel
{
public DrawPanel()
{ DoubleBuffered = true; }
}
更新: 而不是 Panel
,这是一个 Container
控件,并不是真的要在上面绘制,您可以使用 Picturebox
或 Label
(Autosize=false
);两者都开箱即用 DoubleBuffered
属性 并且比 Panels
更好地支持绘图。
我有一个面板,我需要在上面画一个水平图表。但有时图表对于面板来说可能太长,即使表格有最大尺寸。所以我想在面板上做一个水平条,让用户可以看到绘图中超出边界的剩余部分。
图表是这样的:
如您所见,图表超出了面板和表格的范围。我不知道该怎么做,所以我没有要显示的代码。那么如何使用基本方法来实现呢?
是的,解决方案非常基本,只要您要绘制的尺寸不超过 32k 像素宽度即可:
- 把你的
Panel
放在另一个里面。 - 外层
Panel
有AutoScroll=true
- inner 你画的地方有你画的尺寸。
- 您需要在
Paint
事件中绘图,无论如何都应该这样做 (!)
现在外部 Panel
显示水平滚动条,用户可以左右滚动并查看绘图的所有部分。
一种替代方法是添加一个虚拟控件,强制绘图 Panel
的 AutoScroll
正常工作,但我发现使用两个 Panels
更简洁。
注意:您应该使用 PictureBox
或至少使用双缓冲 Panel
子类以避免闪烁和撕裂:
class DrawPanel : Panel
{
public DrawPanel()
{ DoubleBuffered = true; }
}
更新: 而不是 Panel
,这是一个 Container
控件,并不是真的要在上面绘制,您可以使用 Picturebox
或 Label
(Autosize=false
);两者都开箱即用 DoubleBuffered
属性 并且比 Panels
更好地支持绘图。