在VBA中的帧之间拖放

我想以Excel / VBA的forms进行以下操作:窗体上有两个框架,并排排列。 我们称它们为frame1frame2 。 在frame1里面,还有其他的控件,比如说带有文本的标签。 我想要做的是让用户从一个框架抓住一个控件,并顺利地拖到另一个控件。

但是,该控件在将其拖出frame1消失。 我试图摆弄控制和框架的ZOrder,但这并没有帮助。 有没有人知道是否有可能从框架中拖出一些东西(当然是在运行的forms上),显然是在其他所有东西之上?

提前致谢!

对不起,迟到了,昨天我没有在我的办公桌前。

我可以告诉你我有什么,但我不确定这是什么地方解决问题。 无论如何,我们有如上所述的frame1frame2 ,在frame1里面有Label1 。 我给了Label1通常的拖放鼠标事件:

 Private x_offset%, y_offset% Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, _ ByVal X As Single, ByVal Y As Single) If Button = XlMouseButton.xlPrimaryButton Then x_offset = X y_offset = Y End If End Sub Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, _ ByVal X As Single, ByVal Y As Single) If Button = XlMouseButton.xlPrimaryButton Then Label1.Left = Label1.Left + X - x_offset Label1.Top = Label1.Top + Y - y_offset End If End Sub 

这当然只处理拖放部分。 我已经尝试设置Label1的ZOrder来解决这个问题,但是在这里实际上并没有太多的工作。 当然,Label1的父类是它原来的框架,但是父属性是只读的。

同时,我也发现,如果将标签放在框架中而不是在框架内,例如在其他标签上,则拖放不是问题。 我猜这些框架只拥有拥有它们中所有东西的属性,而且在运行时期所有权并不值得商榷。 如果有人知道解决办法,我会很感激,但至less现在我有一个可行的select。

再次感谢!

走出箱子(没有双关语意思),我们也可能会问为什么我们必须使用一个框架的问题…如果严格地对元素进行可视化分组,我们实际上可以通过使用标签来创build看起来相同的东西。 使用一个标签的背面,设置Caption为空白, SpecialEffect蚀刻。 为标题添加第二个标签。

在这里输入图像说明

这是它在运行时的样子

在这里输入图像说明

正如你所看到的,在运行时几乎没有明显的区别,但是使用标签控件作为你的框架给你相同的视觉元素,同时完全绕过帧控制固有的控制所有者问题。

当然有时候框架更好,比如使用选项button,但是在你的情况下,听起来好像一个标签可以很好地实现你的目标。

希望有所帮助!