none
画图问题的困惑 RRS feed

  • 问题

  • 我画的曲线图大部分时间都正确,偶尔画出曲线后由立刻消失,请给我一点查找问题的线索。

    我从硬盘的数据文件读出数据,窗体上面用一个Panle做画布, 用CreatGraphics方法创建画布,用DrawLine的方法画线。大部分时间都正确,偶尔画出曲线后由立刻消失。还有几次,画好的图,按了一下ALT键就消失了。

    请指点一下查找问题的方向。。。,谢谢。
    2010年1月15日 3:45

答案

  • 需要画图时执行invalide方法,会触发Paint


    http://feiyun0112.cnblogs.com/
    • 已标记为答案 菜鸟学VB 2010年1月15日 11:29
    2010年1月15日 9:48
    版主
  • 你好!
         实际上这个和窗体的重绘有一定的关系,你这样画图的话,只要窗体一重绘,你的图马上就没有了!你可以把其他窗口移动到直线上看看效果,直线马上就消失了!
         建议订阅pnlDisplayArea的Paint事件,在Paint事件中绘图!
    周雪峰
    谢谢你的答复,但问题是,我要根据从硬盘读出的数据不停的变换图形,这个Panel并不是总显示同一图形啊。这种情况能放到Paint里吗?
    可以啊!这就是Paint事件存在的目的,他就是用来做这个的!
    你在Paint事件的处理程序中根据硬盘上的数据画图就可以了!
    你想画图的使用,使用窗体的Refresh方法就可以触发Paint事件了!

    周雪峰
    • 已标记为答案 菜鸟学VB 2010年1月15日 11:29
    2010年1月15日 11:08
    版主

全部回复

  • 用最简单的代码又试了一下,发现,用一个按钮通过drawline画出一根线。第一次画完后,按下Alt,这个线就消失了。再次按下按钮重新画这线后,再怎么按Alt键都不消失。为什么呢?

    按钮的代码:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim gra As Graphics = pnlDisplayArea.CreateGraphics
            gra.DrawLine(Pens.Blue, New PointF(0, 0), New PointF(500, 500))
            gra.Dispose()
        End Sub

    2010年1月15日 5:55
  • 你好!
         实际上这个和窗体的重绘有一定的关系,你这样画图的话,只要窗体一重绘,你的图马上就没有了!你可以把其他窗口移动到直线上看看效果,直线马上就消失了!
         建议订阅pnlDisplayArea的Paint事件,在Paint事件中绘图!
    周雪峰
    2010年1月15日 7:44
    版主
  • 你好!
         实际上这个和窗体的重绘有一定的关系,你这样画图的话,只要窗体一重绘,你的图马上就没有了!你可以把其他窗口移动到直线上看看效果,直线马上就消失了!
         建议订阅pnlDisplayArea的Paint事件,在Paint事件中绘图!
    周雪峰
    谢谢你的答复,但问题是,我要根据从硬盘读出的数据不停的变换图形,这个Panel并不是总显示同一图形啊。这种情况能放到Paint里吗?
    2010年1月15日 9:33
  • 需要画图时执行invalide方法,会触发Paint


    http://feiyun0112.cnblogs.com/
    • 已标记为答案 菜鸟学VB 2010年1月15日 11:29
    2010年1月15日 9:48
    版主
  • 你好!
         实际上这个和窗体的重绘有一定的关系,你这样画图的话,只要窗体一重绘,你的图马上就没有了!你可以把其他窗口移动到直线上看看效果,直线马上就消失了!
         建议订阅pnlDisplayArea的Paint事件,在Paint事件中绘图!
    周雪峰
    谢谢你的答复,但问题是,我要根据从硬盘读出的数据不停的变换图形,这个Panel并不是总显示同一图形啊。这种情况能放到Paint里吗?
    可以啊!这就是Paint事件存在的目的,他就是用来做这个的!
    你在Paint事件的处理程序中根据硬盘上的数据画图就可以了!
    你想画图的使用,使用窗体的Refresh方法就可以触发Paint事件了!

    周雪峰
    • 已标记为答案 菜鸟学VB 2010年1月15日 11:29
    2010年1月15日 11:08
    版主
  • 你好!
         实际上这个和窗体的重绘有一定的关系,你这样画图的话,只要窗体一重绘,你的图马上就没有了!你可以把其他窗口移动到直线上看看效果,直线马上就消失了!
         建议订阅pnlDisplayArea的Paint事件,在Paint事件中绘图!
    周雪峰
    谢谢你的答复,但问题是,我要根据从硬盘读出的数据不停的变换图形,这个Panel并不是总显示同一图形啊。这种情况能放到Paint里吗?
    可以啊!这就是Paint事件存在的目的,他就是用来做这个的!
    你在Paint事件的处理程序中根据硬盘上的数据画图就可以了!
    你想画图的使用,使用窗体的Refresh方法就可以触发Paint事件了!

    周雪峰
    谢谢指点,我用Paint的方法改写一下。
    2010年1月15日 11:29