2

我在显示一个太大而无法在一个面板上看到的图表时遇到问题。我必须滚动条来改变图表上的观点,但是当我想滚动图片时,形状在不同的位置上移动,一切都被压碎了。

当我显示它时,它看起来像这里链接当我尝试查看图表底部时 ,它看起来像这里链接

每次滚动面板时,它看起来像应用程序绘制形状,当我进入图片底部时,左上角的点仍然是(0,0)而不是(0,500)

我有算法,它将面板上的位置值和对象的 nr id 提供给数组,然后我有绘制它的循环,从字典中获取有关对象的信息以及他从数组中的位置。

如何解决这个问题?感谢任何建议

已编辑我不想再画了小面板,所以我们必须有机会滚动并查看 grapf 的底部,左侧或他想要的这一侧。

我将尝试提供有关应用程序的更多详细信息。午餐时,您会看到控制面板(form1),您可以在其中添加事件/功能/异或/或每个选项在图表上都有自己的形状。因此,用户添加例如带有文本的事件,按下按钮添加创建对象并将其添加到集合中。他可以根据需要添加事件/功能,异或/或任意数量。

好的,当他添加他想要的所有内容时,现在他想查看图表,所以他按下“生成图表”按钮,现在应用程序显示下一个带有面板和滚动条的窗口。您可以在链接中看到该窗口。在此行之后的第二种形式

private void panel1_Paint(object sender, PaintEventArgs e){

我有将坐标值放到表中的算法,然后 forech 循环从字典(集合)中获取:

  • 应该在图形中间显示的文本,
  • 确定面板上形状类型的值。

从数组循环获取坐标值。

这就是它的工作原理,我也可以在需要时将代码放在这里。

4

2 回答 2

7

标准错误是忘记将您的绘图偏移滚动位置。使用面板的 AutoScrollPosition 属性,如下所示:

    void panel1_Paint(object sender, PaintEventArgs e) {
        e.Graphics.TranslateTransform(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y);
        e.Graphics.DrawLine(Pens.Black, 0, 0, 300, 2000);
    }

Panel 控件通常对绘画非常古怪,它被设计为容器控件。您通常还希望它具有双缓冲并在调整大小时强制重新绘制。设置 DoubleBuffered 和 ResizeRedraw 属性需要从 Panel派生您自己的控件。

于 2013-05-12T16:38:22.807 回答
0

每次滚动面板时,它看起来就像应用程序绘制形状

为什么不擦除绘图区域并再次绘制形状?

也许你可以发布一个代码片段?

于 2013-05-12T08:59:14.023 回答