VB.NET 4.5运行时在excel工作表上移动控件

VB.NET 4.5运行时在excel工作表上移动控件,excel,controls,move,ribbon,Excel,Controls,Move,Ribbon,我正在64位windows 8.1 professional平台上的Visual Studio 2013中使用Visual Basic 2013和VSTO。 我创建了一个功能区加载项,允许用户通过该功能区在电子表格上放置控件。我一直在尝试添加其他功能,以便当用户单击/拖动控件(本例中为Windows.Forms.Button)时,可以将其拖动(或仅移动)到工作表上的另一点。 我就是找不到一个方法来做这件事。我可以让它移动,但只能在它的显示矩形内(我想),这样按钮就会部分(或完全取决于我移动的距离

我正在64位windows 8.1 professional平台上的Visual Studio 2013中使用Visual Basic 2013和VSTO。 我创建了一个功能区加载项,允许用户通过该功能区在电子表格上放置控件。我一直在尝试添加其他功能,以便当用户单击/拖动控件(本例中为Windows.Forms.Button)时,可以将其拖动(或仅移动)到工作表上的另一点。 我就是找不到一个方法来做这件事。我可以让它移动,但只能在它的显示矩形内(我想),这样按钮就会部分(或完全取决于我移动的距离)消失。我真的无法发布任何有意义的代码,因为我已经尝试/重试、编写/重写了很多次,但都没有成功。 您知道如何或是否可以在工作表中移动这些控件/按钮吗? 谢谢

在下面添加了一些其他信息:

我已经清理了一些代码,如果您正在研究这个问题,这些代码可能会对您有所帮助。下面的第一部分是mousedown和mousemove事件的事件处理程序。这些允许移动控制按钮,但您可以通过电子表格中的窗口看到它(显示矩形?),如果您在按住鼠标按钮的同时将其移动到查看矩形的边界之外,则该按钮将消失

Private Sub button1_mousedown(sender As Object, e As System.Windows.Forms.MouseEventArgs)
    Dim sentButton As Button = CType(sender, Button)
    Dim a, b As Rectangle

    a = sentButton.ClientRectangle
    b = sentButton.DisplayRectangle

    xy = Control.MousePosition.X - sentButton.Location.X
    yx = Control.MousePosition.Y - sentButton.Location.Y
End Sub

Private Sub button1_mousemove(sender As Object, e As System.Windows.Forms.MouseEventArgs)
    Dim sentButton As Button = CType(sender, Button)

    If e.Button = Windows.Forms.MouseButtons.Left Then
        newpoint = Control.MousePosition
        newpoint.X -= xy
        newpoint.Y -= yx
        sentButton.Location = newpoint

        Application.DoEvents()
    End If
End Sub
这些事件处理程序通过以下分配样式从父窗体调用:

AddHandler button.MouseDown, AddressOf button1_mousedown ' handles mouse down
还有一件令人费解的事。如果我调整控件的大小,它可以正常工作。也就是说,它不会消失控件的任何部分,即使它现在比以前更大,尽管我没有明确做任何事情来允许增加或减少大小。我可以使用以下行调整大小:

sentButton.SetBounds(20, 20, 100, 50)
再次提问:您知道如何或是否可以在工作表中移动这些控件/按钮吗