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

时间:2015-08-15 12:31:51

标签: excel controls move ribbon

我在64位Windows 8.1专业平台上的Visual Studio 2013中使用Visual Basic 2013和VSTO。 我创建了一个功能区插件,允许用户通过该功能区在电子表格上放置控件。我一直在尝试添加其他功能,以便当用户单击/拖动控件(在这种情况下为Windows.Forms.Button)时,可以将其拖动(或仅移动)到工作表上的另一个点。 我根本找不到办法做到这一点。我可以让它移动但只在其显示矩形(我认为)内部,以便部分按钮(或完全取决于我移动它的距离)消失。我无法发布任何有意义的代码,因为我已经尝试/重试,编写/重写了很多次而没有太大的成功。 你知道怎么或我是否可以在一张纸上移动这些控件/按钮? 谢谢,

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

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

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)

再次提问:你知道如何在一张纸上移动这些控件/按钮吗?

0 个答案:

没有答案