在VBA中的帧之间拖放
我想以Excel / VBA的forms进行以下操作:窗体上有两个框架,并排排列。 我们称它们为frame1
和frame2
。 在frame1里面,还有其他的控件,比如说带有文本的标签。 我想要做的是让用户从一个框架抓住一个控件,并顺利地拖到另一个控件。
但是,该控件在将其拖出frame1
消失。 我试图摆弄控制和框架的ZOrder,但这并没有帮助。 有没有人知道是否有可能从框架中拖出一些东西(当然是在运行的forms上),显然是在其他所有东西之上?
提前致谢!
对不起,迟到了,昨天我没有在我的办公桌前。
我可以告诉你我有什么,但我不确定这是什么地方解决问题。 无论如何,我们有如上所述的frame1
和frame2
,在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,但是在你的情况下,听起来好像一个标签可以很好地实现你的目标。
希望有所帮助!