【问题标题】:Drag & drop between frames in VBA在 VBA 中的帧之间拖放
【发布时间】:2014-11-11 16:47:59
【问题描述】:

我想在 Excel/VBA 表单中执行以下操作:表单上有两个并排的框架。我们称他们为frame1frame2。在 frame1 内,还有其他控件,比如带有文本的标签。我想做的是使用户能够从一帧中抓取一个控件并将其顺利拖动到另一帧中。

但是,将控件拖出frame1 后,它就会消失。我试图摆弄控件的 ZOrder 和框架,但这无济于事。有谁知道是否可以将某些东西明显地拖出框架(当然是在运行的窗体上),放在其他所有东西之上?

提前致谢!

抱歉耽搁了,我昨天不在办公桌前。

我可以向您展示我所拥有的,但我不确定这是解决问题的“地方”。无论如何,如上所述,我们有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的parent是它原来所在的frame,但是parent属性是只读的。

同时,我还发现,如果我将标签不在 frames 内而是例如在其他标签之上。我猜框架只是具有拥有其中所有内容的属性,并且在运行时所有权是没有争议的。如果有人知道解决此问题的方法,我将不胜感激,但至少现在我有一个可用的替代方案。

再次感谢!

【问题讨论】:

标签: forms vba excel


【解决方案1】:

跳出框框(没有双关语),我们可能还会问为什么我们必须使用框架的问题...如果它严格用于元素的视觉分组,我们实际上可以通过使用标签来创建看起来相同的东西.背面使用一个标签,将Caption 设置为空白,将SpecialEffect 设置为蚀刻。为标题添加第二个标签。

这是它在运行时的样子...

如您所见,在运行时几乎没有明显的差异,但是使用标签控件作为框架可以为您提供相同的视觉元素,同时完全绕过框架控件固有的控件所有者问题。

当然,有时框架会更好,例如使用选项按钮时,但在您的情况下,听起来标签可能会很好地实现您的目标。

希望有帮助!

【讨论】:

  • 嗨亚当,谢谢,这当然是一个可行的解决方案!想要的效果确实只是为了创造一个这一切都属于一起的印象。
  • 很高兴它有帮助!欢迎来到 StackOverflow,玩得开心!
  • P.S.另一个快速提示,您可以在标题标签的开头和结尾放置一个空格,使其看起来与框架标题相同。 IE。 " Not a Frame "
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多