我现在做一个电路模拟软件,现在在电器元件的两旁分别设置一个图片框,上面就画了一个小圆点(半径70twip)。现在想要实现:
当用户在其中一个图片框上按下鼠标并开始拖到另一个图片框上松开鼠标时,就把这两个图片框用线连接起来,最后看用户的连接是否正确。
对于在一个窗体上按下鼠标开始画线,直到松开鼠标,可以实现。但是下面的代码就不能画,原因是什么?该怎么修改?
其中picCir是图片框数组,beginL是表示开始画线的逻辑变量。
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If beginL = True Then
        DrawWidth = 2
        Form1.Line (CurrentX, CurrentY)-(X, Y), vbBlack
    End If
End SubPrivate Sub picCir_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 1 Then
        beginL = True
        Form1.CurrentX = picCir(Index).Left
        Form1.CurrentY = picCir(Index).Top
    End If
End Sub
Private Sub picCir_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 1 Then
        beginL = False
    End IfEnd Sub

解决方案 »

  1.   

    当然不行,鼠标按下后,直到松开,这段时间里没有发生焦点转移,也就是当鼠标松开时,接收鼠标up事件的依然是你按下时的那个控件。你可以考虑在按下的那个控件里写up事件处理程序,但是取得的x,y需要换算
      

  2.   

    现在是,按下的控件是picCir数组的一个元素,也是在picCir数组的另一个元素上松开。所以对按下的这个控件来说和对松开的那个元素来说还是,都是picCir_MouseDown,picCir_MouseUp啊。名称是一样的
      

  3.   

    index不同
    而且你也想得到嘛,根本就是两个控件,怎么可能是一样的?两个人都叫张三,身份证号码不同,你觉得那是同一个人吗?windows事件的传递,不是根据名字来的,名字只不过是编程时方便记忆的符号,两个对象就有两个对象的id,虽然看上去名字相同,不过是vb做了处理,其实是不同的。