在显示列表框之前更新ControlTipText

时间:2018-08-03 19:40:17

标签: excel vba

我有一个带有列表框的表单。我试图在鼠标悬停时更新ControlTipText。我在带有列表框(字体Calibri,字体大小12)的用户窗体后面使用以下代码。

Option Explicit

Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim Position As Long
Position = Int(Y / 15)
With Me.ListBox1
    .ControlTipText = vbNullString
    If Position < .ListCount And Position >= 0 Then
        .ControlTipText = .List(Position)
        Debug.Print .List(Position), .ControlTipText
    End If
End With
End Sub

Private Sub UserForm_Initialize()
With Me.ListBox1
    .AddItem "Banana"
    .AddItem "Potato"
    .AddItem "Tomato"
End With
End Sub

问题是ControlTipText在显示后正在更新,因此它总是落后一个位置(如果我将鼠标移到“马铃薯”上,然后移至屏幕外,然后移至“香蕉”上,{{1} }会说“土豆”。立即窗口显示正确的位置并更新了ControlTipText,因此它似乎可以正常工作,但仅在显示ControlTipText之后。

我已经针对ControlTipTextListBoxMouseDown进行了其他活动,但它们仅在出现点击时起作用。诸如this one之类的在线示例似乎在说,唯一的方法是单击一次更新。

是否有一种方法可以强制MouseUp在显示之前进行更新,或者更好的是,在使用ControlTipText事件时立即显示更新的ControlTipText

修改: 需求说明:用户窗体上的空间很少,要显示的文本可能很长(最多60个单词)。

1 个答案:

答案 0 :(得分:1)

我怀疑是否存在强制实时ControlTipText的事情。建议在您在用户窗体上某处设置的标签中显示该值。至少这将是简单的出路。

但是,您可以通过在用户窗体中自由移动的动态ControlTipText自己制作frame之类的东西(由于空间有限)。这是一个示例:

Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim Position As Long

Position = Int(Y / 10)
If Position < UserForm1.ListBox1.ListCount And Position >= 0 Then
    With Controls("TIPTEXT")
        .Caption = Me.ListBox1.List(Position)
        .Left = X + 75
        .Width = 50
        .Top = Y + 35
        .Height = 10
    End With
    Controls("TIPTEXT").Visible = True
Else
    Controls("TIPTEXT").Visible = False
End If

End Sub

Private Sub UserForm_Initialize()

Dim FRM As MSForms.Frame

With Me.ListBox1
    .AddItem "Banana"
    .AddItem "Potato"
    .AddItem "Tomato"
    .AddItem "Apples"
    .AddItem "Pears"
End With

Set FRM = Me.Controls.Add("Forms.Frame.1")
With FRM
        .Name = "TIPTEXT"
        .BackColor = vbYellow
        .Visible = False
        .ZOrder (0)
End With

End Sub

结果:

enter image description here

看到任何人想出其他解决方案都非常有趣:)

祝你好运!