c#在面板上绘图并滚动结果

时间:2013-05-11 14:37:03

标签: c# drawing scrollbar panel

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

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

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

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

如何解决这个问题? Thx任何建议的

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

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

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

private void panel1_Paint(object sender, PaintEventArgs e){

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

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

从数组循环获取坐标值。

这是如何工作的,我还可以在需要的时候把代码放在这里。

2 个答案:

答案 0 :(得分: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中派生your own control

答案 1 :(得分:0)

  

看起来应用程序每次滚动面板时都会绘制形状

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

也许您可以发布代码段?