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)