我想在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的父级是它最初的帧,但是父属性是只读的。
与此同时,我还发现,如果我将标签放在 frames 之内,那么拖放不是问题,例如在其他标签之上。我猜这些框架只具有拥有其中所有内容的属性,并且所有权在运行时期间无可争议。如果有人知道解决这个问题,我会很高兴知道,但至少现在我有一个可用的选择。
再次感谢!
答案 0 :(得分:2)
走出盒子(没有双关语),我们也可能会问为什么我们必须使用框架...如果它严格用于元素的可视分组,我们实际上可以通过使用标签创建看起来相同的东西。背面使用一个标签,将Caption
设置为空白,将SpecialEffect
设置为“已蚀刻”。为标题添加第二个标签。
以下是运行时的表现......
正如您所看到的,在运行时几乎没有明显的差异,但使用标签控件作为框架可以为您提供相同的视觉元素,同时完全绕过框架控件固有的控件所有者问题。
当然有时框架更好,例如使用选项按钮时,但在你的情况下,听起来好像标签可以很好地实现你的目标。
希望有所帮助!