读书人

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

发布时间: 2012-12-15 15:16:03 作者: rapoo

我的的自定义控件的坐标如何取得呢,奇怪呢
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

读书人网 >VB

热点推荐