Vb.net 如何仅使用鼠标指针使控件向左/向右移动?
我目前正在制作一个游戏,它包含一个只能从左向右移动的桨(称为Vb.net 如何仅使用鼠标指针使控件向左/向右移动?,vb.net,winforms,Vb.net,Winforms,我目前正在制作一个游戏,它包含一个只能从左向右移动的桨(称为base) 我发现了一段允许平台移动的代码,但是它向各个方向移动,并且没有与我的鼠标指针正确同步: Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove base.Location = MousePosition End
base
)
我发现了一段允许平台移动的代码,但是它向各个方向移动,并且没有与我的鼠标指针正确同步:
Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
base.Location = MousePosition
End Sub
要使拨杆仅水平移动,我需要更改或添加哪些内容?您只需将X坐标指定给“位置”属性即可完成此操作:
base.Location = New Point(Cursor.Position.X, Button1.Location.Y)
这将忽略Y坐标,只会导致水平移动。另外,请注意,根据您的情况,您可能需要平移鼠标指针相对于窗口的坐标。因此,如果结果失真,请按如下方式操作:
base.Location = New Point(PointToClient(Cursor.Position).X, Button1.Location.Y)
这将把鼠标坐标(例如光标位置属性)转换为窗口相对坐标。只需将X坐标指定给位置属性即可:
base.Location = New Point(Cursor.Position.X, Button1.Location.Y)
这将忽略Y坐标,只会导致水平移动。另外,请注意,根据您的情况,您可能需要平移鼠标指针相对于窗口的坐标。因此,如果结果失真,请按如下方式操作:
base.Location = New Point(PointToClient(Cursor.Position).X, Button1.Location.Y)
这会将鼠标坐标(例如,Cursor.Position属性)转换为窗口相对坐标。假设您的拨片(我在这里命名控件拨片,base
不是一个好名字)放置在表单底部附近,其高度约为25像素,其与窗体底部的距离约为10-20像素
- 当鼠标进入表单时,可以将光标剪切到其正上方的窄条带上
- 然后可以移动光标,而不与表单中的其他控件相交,这可能会干扰
MouseMove
事件的生成
- 您还可以隐藏光标,这样箭头指针在视觉上就不会令人讨厌(当然,除非其他东西需要它)
- 当光标移动时,移动将转换到拨杆控件的中间,该控件仅相对于当前光标偏移向左或向右移动:
(指向客户端(游标位置).X-(拨片宽度\2)
)
- 当窗体关闭时,恢复光标和剪裁区域
将此代码粘贴到包含挡板的表单中(并将base
重命名为pable
):
假设您的挡板(我将控件命名为挡板
,这里,base
不是一个好名字)放置在窗体底部附近,其高度约为25像素,与窗体底部的底部距离约为10-20像素
- 当鼠标进入表单时,可以将光标剪切到其正上方的窄条带上
- 然后可以移动光标,而不与表单中的其他控件相交,这可能会干扰
MouseMove
事件的生成
- 您还可以隐藏光标,这样箭头指针在视觉上就不会令人讨厌(当然,除非其他东西需要它)
- 当光标移动时,移动将转换到拨杆控件的中间,该控件仅相对于当前光标偏移向左或向右移动:
(指向客户端(游标位置).X-(拨片宽度\2)
)
- 当窗体关闭时,恢复光标和剪裁区域
将此代码粘贴到包含挡板的表单中(并将base
重命名为pable
):
我试过了,它确实起作用了,但是拨片卡在了屏幕的顶部而不是底部。如何使挡板仍然只向左/向右移动,但仍保持在屏幕底部?您可以使用设计器或通过代码将其初始位置调整为位于屏幕底部:base.Location=New Point(base.Location.X,Me.Size.Height base.Size.Height)
我尝试过这个方法,它确实有效,但是,挡板卡在屏幕顶部而不是底部。如何使挡板仍然只向左/向右移动,但仍保持在屏幕底部?您可以使用设计器或通过代码将其初始位置调整为位于屏幕底部:base.Location=新点(base.Location.X,Me.Size.Height base.Size.Height)