C# 在面板上绘制并滚动结果

C# 在面板上绘制并滚动结果,c#,drawing,scrollbar,panel,C#,Drawing,Scrollbar,Panel,我在显示图表时遇到问题,因为图表太大,无法在一个面板上看到。 我必须使用滚动条来改变图表上的视角,但是当我想要滚动图片时,形状在不同的位置移动,所有的东西都被压碎了 看起来像这样 当我展示它的时候,就像这样,当我试着看图表的底部 每次我滚动面板时,应用程序都会绘制形状,当我进入图片底部时,左上角的点仍然是(0,0)而不是(0500) 我有一个算法,它将面板上的位置值和对象的nr id赋给数组,然后我有一个循环来绘制它,从字典中获取关于对象的信息和他在数组中的位置 如何解决这个问题? 谢谢你的建议

我在显示图表时遇到问题,因为图表太大,无法在一个面板上看到。 我必须使用滚动条来改变图表上的视角,但是当我想要滚动图片时,形状在不同的位置移动,所有的东西都被压碎了

看起来像这样 当我展示它的时候,就像这样,当我试着看图表的底部

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

我有一个算法,它将面板上的位置值和对象的nr id赋给数组,然后我有一个循环来绘制它,从字典中获取关于对象的信息和他在数组中的位置

如何解决这个问题? 谢谢你的建议

编辑 我不想再画了,我想画一个大图,像这样(评论中的链接),但我知道用户可以制作50个对象(形状),这种大图在小面板上看不到,所以我们必须有机会滚动并看到图的底部,左边或他想要的这一边

我会尽量提供更多关于申请的细节。 当您使用它时,您会看到控制面板(form1),在其中添加事件/函数/xor/或此选项中的每个选项在图形上都有自己的形状。 因此,用户添加例如带有文本的事件,按下按钮add创建对象并将其添加到集合中。他可以添加事件/函数、xor/或任意多个

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

private void panel1_Paint(object sender, PaintEventArgs e){
我有一个算法,将坐标值放入表中,然后forech循环从字典(集合)中获取:

    文本应在图形中部显示,
  • 值,该值确定面板上的形状类型
从数组循环获取坐标值

这就是它的工作原理,我也可以在需要的时候在这里输入代码

每次我滚动面板时,应用程序都会绘制这些形状

为什么不删除绘图区域并重新绘制形状


也许您可以发布代码片段?

标准错误是忘记按滚动位置偏移图形。使用面板的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);
    }

面板控件通常在绘画方面非常古怪,它被设计成一个容器控件。您通常还希望对其进行双缓冲,并在调整其大小时强制重新绘制。设置DoubleBuffered和ResizerDraw属性需要从面板派生。

-这是示例图形,我是这样说的,每次单击滚动条时都会绘制形状。当我按滚动条右移大约200个单位时。对于这个答案,左上角的坐标应该是200,0,而不是0,0.thx,但我解决了它。我将滚动条添加到表单中,而不是面板中,这就是工作;)我已经发了我的邮件。你能帮我吗?