【发布时间】:2014-11-11 16:47:59
【问题描述】:
我想在 Excel/VBA 表单中执行以下操作:表单上有两个并排的框架。我们称他们为frame1 和frame2。在 frame1 内,还有其他控件,比如带有文本的标签。我想做的是使用户能够从一帧中抓取一个控件并将其顺利拖动到另一帧中。
但是,将控件拖出frame1 后,它就会消失。我试图摆弄控件的 ZOrder 和框架,但这无济于事。有谁知道是否可以将某些东西明显地拖出框架(当然是在运行的窗体上),放在其他所有东西之上?
提前致谢!
抱歉耽搁了,我昨天不在办公桌前。
我可以向您展示我所拥有的,但我不确定这是解决问题的“地方”。无论如何,如上所述,我们有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的parent是它原来所在的frame,但是parent属性是只读的。
同时,我还发现,如果我将标签不在 frames 内而是例如在其他标签之上。我猜框架只是具有拥有其中所有内容的属性,并且在运行时所有权是没有争议的。如果有人知道解决此问题的方法,我将不胜感激,但至少现在我有一个可用的替代方案。
再次感谢!
【问题讨论】:
-
欢迎来到 SO。你能提供一个你所拥有的示例代码吗?
-
@milz 我已经添加了代码和更多信息。谢谢!