excel – 在VBA中的帧之间拖放

我想以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的父级是它最初的帧,但父属性是只读的.

与此同时,我还发现,如果我将标签放在不是框架内,那么拖放也不是问题.在其他标签之上.我猜这些框架只具有拥有其中所有内容的属性,并且所有权在运行时期间无可争议.如果有人知道解决这个问题,我会很高兴知道,但至少现在我有一个可用的选择.

再次感谢!

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

以下是它在运行时的表现……

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

当然有时框架更好,例如使用选项按钮时,但在你的情况下,听起来似乎标签可以很好地实现你的目标.

希望有所帮助!

点赞