首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

小弟我的的自定义控件的坐标怎么取得呢,奇怪呢

2012-12-15 
我的的自定义控件的坐标如何取得呢,奇怪呢left 和TOP 在移动后都是0了呢,我调测的时候 在控件的move 事件

我的的自定义控件的坐标如何取得呢,奇怪呢
left 和TOP 在移动后都是0了呢,  我调测的时候 在控件的move 事件中能取到 X,Y ,但是在设断点调测模式下有X,Y的值,但如果将 msgbox x 去掉, 我就无法得到属性X和Y了 ,什么原因呢 ,我就想取得移动后控件的坐标 LEFT 和 height

http://topic.csdn.net/t/20020708/15/858627.html这里说的是我的原因吗? 好像不是


Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)


If Button = vbLeftButton Then
 
     RaiseEvent Mousemove(Button, Shift, X, Y)

 MsgBox X
img_x = X (传递给属性X)
img_y = Y(传递给属性y)
End If

End Sub
[解决办法]
在定义MouseMove事件时用Pubilc属性.
这一句RaiseEvent Mousemove(Button, Shift, X, Y)怎么在MouseMove事件的里面呢?应在用户控件的开头.


[解决办法]
这个定义没有(通用里面定义):Public Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)  
[解决办法]
Public Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
RaiseEvent Mousemove(Button, Shift, X, Y)
img_x = X    --------这里的参数X的位置无法传递到主程序中, 我在主程序里调用ctr.img_x 为 0, 
                     但我在此处加一个端点,或msgbox 后,ctr.img_x这个参数就有数值,奇怪
End If

===一下是属性定义
Private img_x, img_y As Single
Public Property Get ctr_x() As Single
  ctr_x = img_x
End Property

Public Property Let ctr_x(ByVal NewValue As Single)
img_x = NewValue
   PropertyChanged "ctr_x"
  
End Property


[解决办法]
1、在标准模块中定义2个全局变量:
Public getUsercontrolX As Long, getusercontrolY As Long
2、用户控件中这样定义事件:
...............
Public Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
...............
Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    RaiseEvent MouseMove(Button, Shift, X, Y)
    getUsercontrolX = X: getusercontrolY = Y
    Debug.Print X, Y
End Sub
[解决办法]
刚才测试一下,不用定义全局变量。在主程序用户控件的MouseMove事件中直接可以输出鼠标值。
只要定义事件正确。
[解决办法]

Public Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
...............
Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then  ---------得判断一下是否按住左键开始移动 , 因此 放在if 里边就打印不出来呀 ,我就打印 0,16呢 



 
  RaiseEvent MouseMove(Button, Shift, X, Y)
  getUsercontrolX = X: getusercontrolY = Y
  Debug.Print X, Y

end if 
End Sub


[解决办法]
  我在控件里加了2个 text 文本框,居然显示不出来X ,Y 
RaiseEvent MouseMove(Button, Shift, X, Y)
  getUsercontrolX = X: getusercontrolY = Y
text1.text=x
text2.text=y
[解决办法]

引用:
我在控件里加了2个 text 文本框,居然显示不出来X ,Y 
RaiseEvent MouseMove(Button, Shift, X, Y)
  getUsercontrolX = X: getusercontrolY = Y
text1.text=x
text2.text=y

不是在用户控件里面输出座标,而是引用该控件的窗体代码内输出座标。
例如,Slider是你的用户控件,在窗体Form1内这样写:
Private Sub Slider_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = vbLeftButton Then
           Debug.Print X, Y
        End If
End Sub


[解决办法]
我自定义控件, 要拖动他, 拖动后要知道他的位置坐标, 主程序如下,在程序里我们扑捉到move 事件中的变化的X,Y ,将他们通过参数传递到 了 ctrl.ctr_x 中, 但我发现ctr_x属性保存不住, 运行时候断点情况下有值,但去掉断点就是0了

Private Sub ctrl_ObjectEvent(Info As EventInfo)
Select Case Info.Name
   Case "Mousemove"
      If Info.EventParameters.Item(0) = vbLeftButton Then
            ctrl.ctr_x = Info.EventParameters.Item(2).Value
            ctrl.ctr_y = Info.EventParameters.Item(3).Value
            ctrl.move ctrl.Left + Info.EventParameters.Item(2).Value , ctrl.Top + Info.EventParameters.Item(3).Value 

End If

Private Sub Command3_Click()

MsgBox ctrl.ctr_y------ 移动后 显示不出来呀是0 
End Sub

热点排行