在面板控件上绘图时如何在面板控件中制作水平条?

How to make a horizontal bar in a panel control when drawing on it?

我有一个面板,我需要在上面画一个水平图表。但有时图表对于面板来说可能太长,即使表格有最大尺寸。所以我想在面板上做一个水平条,让用户可以看到绘图中超出边界的剩余部分。

图表是这样的:

如您所见,图表超出了面板和表格的范围。我不知道该怎么做,所以我没有要显示的代码。那么如何使用基本方法来实现呢?

是的,解决方案非常基本,只要您要绘制的尺寸不超过 32k 像素宽度即可:

  • 把你的 Panel 放在另一个里面。
  • 外层PanelAutoScroll=true
  • inner 你画的地方有你画的尺寸。
  • 您需要在 Paint 事件中绘图,无论如何都应该这样做 (!)

现在外部 Panel 显示水平滚动条,用户可以左右滚动并查看绘图的所有部分。

一种替代方法是添加一个虚拟控件,强制绘图 PanelAutoScroll 正常工作,但我发现使用两个 Panels 更简洁。

注意:您应该使用 PictureBox 或至少使用双缓冲 Panel 子类以避免闪烁和撕裂:

class DrawPanel : Panel
{
    public DrawPanel()
    { DoubleBuffered = true; }
}

更新: 而不是 Panel,这是一个 Container 控件,并不是真的要在上面绘制,您可以使用 PictureboxLabelAutosize=false);两者都开箱即用 DoubleBuffered 属性 并且比 Panels 更好地支持绘图。