我正在尝试获取一个工具提示,以便在excel电子表格上的ActiveX复选框上显示。
以下代码确实显示和隐藏了工具提示,但没有达到预期。如果将鼠标移到复选框上的速度过快,工具提示(标签)将保留在工作表上。
Private Sub chkPrice_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
With sht
If .lblTooltip.Visible = False Then
.lblTooltip.Visible = True
ElseIf .lblTooltip.Visible = True Then
.lblTooltip.Visible = False
End If
End With
要使上述代码正常工作,请遵循以下内容:
If mousehovers for 1 second Then display the tooltip
有没有办法检查鼠标停留在控件上的时间?
还有另一种方法吗?
答案 0 :(得分:2)
您可以为此做一些棘手的事情,因此在下面可以找到特定答案的起点。
直接回答问题
在模块顶部,声明Microsoft API获取鼠标坐标:
Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
注意:如果您使用的是32位系统,请从声明中删除PtrSafe
关键字。
另外,在模块顶部,添加以下类型:
Type POINTAPI
Xcoord As Long
Ycoord As Long
End Type
因此,在宏chkPrice_MouseMove
内,您将执行以下操作:
在代码中:
Private Sub chkPrice_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim llCoordBefore As POINTAPI
Dim llCoordAfter As POINTAPI
GetCursorPos llCoordBefore '<-- get first time
Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now())+0.5)
GetCursorPos llCoordAfter '<-- get second time
If llCoordBefore.Xcoord = llCoordAfter.Xcoord And llCordBefore.Ycoord = llCoordAfter.Ycoord Then '<-- compare
With sht
If .lblTooltip.Visible = False Then
.lblTooltip.Visible = True
ElseIf .lblTooltip.Visible = True Then
.lblTooltip.Visible = False
End If
End With
End If
为什么我不使用它
我认为您最好的选择是将ActiveX控件放置在用户不会错误悬停的位置。
您的代码在鼠标悬停时表示:
1)如果工具提示不可见,则使其可见 2)如果工具提示可见,则将其隐藏
如果用户在控件上快速通过,并且工具提示被隐藏,则可以看到它并且不会隐藏。用户应返回控件以再次将其隐藏。
无论如何,以下是您想到的上述方法不是我推荐的一些原因:
答案 1 :(得分:0)
在鼠标移至复选框上方1秒钟后,使用public class User
{
public int Id { get; set; }
public string Username { get; set; }
public byte[] PasswordHash { get; set; }
public byte[] PasswordSalt { get; set; }
public UserRole UserRole { get; set; } //<--- THE IMPORTANT PART
...
}
public class UserRole
{
public int Id { get; set; }
public string Role { get; set; }
}
隐藏标签。
Application.OnTime
Public TootTipVisible As Boolean
Public CheckBoxHasFocus As Boolean
Public Sub ShowTootTip()
Application.Caption = Now 'TootTipVisible & "," & CheckBoxHasFocus
If Not TootTipVisible And Not CheckBoxHasFocus Then
TootTipVisible = True
Sheet1.sht.Visible = True
Application.OnTime Now + TimeValue("00:00:01"), "HideTootTip"
End If
End Sub
Public Sub HideTootTip()
TootTipVisible = False
Sheet1.sht.Visible = False
End Sub