Mousedown事件从OnPaint

时间:2016-04-13 15:49:52

标签: vb.net vb6 flicker mousedown onpaint

所以,在我的程序中,我有一个mousedown事件正在寻找用户点击的X,Y坐标。在mousedown事件中是一系列“if”条件,用于确定如何调用子程序,该子程序在用户触发mousedown事件的位置的X-coord处绘制垂直线。

在VB6中的mousedown事件结束时,是一个“刷新()”。在VB6中运行良好,除了在VB.net中它导致时间关闭并且在调用paint事件时线条将被擦除。为了解决这个问题,我在sub中使用了一个“OnPaint(mypaintArgs)”来绘制线条,而不是用于在VB6版本中触发绘制事件,这样可行。时间很好,线条不会被删除。大。

问题是,它像疯了一样闪烁。使用断点时,paint事件至少触发五次,导致一些疯狂的闪烁。 Doublebuffer没有帮助,也没有任何setStyles。

虽然我无法发布这些子程序的整个代码,但我可以发布足够的内容,以便您了解正在发生的事情。希望有一些措施可以阻止这种疯狂的闪烁/闪烁。

这是从mousedown事件中为绘制线条的表单调用的drawline子例程:

 Public Sub DrawSomeLines()
    'ResizeRedraw = True
    'DoubleBuffered = True
    Dim gr As Graphics = Me.CreateGraphics
    Dim myPaintArgs As New PaintEventArgs(gr, New Rectangle(New Point(0, 0), My.Application.OpenForms("frmDoc").Size))
    'Bunch of code in here that is drawline lines
    'example on line below
    'mypaintargs.graphics.drawline(Pen, X1, Y1, X2, Y2)
    For X = 1 To Number
        Pens(X).Dispose()
    Next
    Me.frmDoc_Paint(Me, myPaintArgs) 'This is new. Replaced the "Refresh()" found in the mousedown event in VB6
End Sub

以下是我可以提供的mousedown事件中的一些代码:

Private Sub frmDoc_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
  '//Code in here for getting X and Y coord of where mouse went "down"
  'code code code
  '//
  '//code in here calls DrawSomeLines in various ways depending on what line you need drawn
  'code code code
  '//
    '--Refresh() 'removed due to timing being bad
End Sub

所以,虽然它有效,但你会得到大约3到4个非常明显的闪光/闪烁。不完全可以接受。希望有人可以提出一两个想法吗?非常感谢提前

0 个答案:

没有答案