读书人

怎么判断鼠标点击的焦点是否在label下

发布时间: 2013-03-16 11:51:46 作者: rapoo

如何判断鼠标点击的焦点是否在label上?
我是做这样的,很多个label 点击哪个哪个就变色,
再点击一个 上一个就恢复。

这个就是我要实现的。谁懂,提示一下
[解决办法]
丢了一句:


Option Explicit
Dim SelLabelIndex As Integer

Private Sub Label1_Click(Index As Integer)
Label1(SelLabelIndex).ForeColor = vbBlack
Label1(Index).ForeColor = vbRed
SelLabelIndex = Index
End Sub

[解决办法]
你15楼的代码和我6楼的代码一个原理。
可以很负责地告诉你,没有任何问题。
一切脱离了环境谈效率的讨论都是扯谈。
你、我、13楼的代码在用户体验上没有任何区别。
CPU极大部分都是空闲的情况下,省下一点运算有意义吗?

又:重复我16楼最后一句话。

[解决办法]
还正楼主自己视自己的编程而定吧,如果数量不多,循环次数少的话,不管是通过定义变量来保存还是通过循环历遍都一样可以达到你的目的,这种情况正如所说的使用循环历遍可以减少函数(事件)的耦合度,使得维护性好。不过如果数量很多,事件频繁的话我个人不是很推荐用历遍循环,比如下面这段:

Option Explicit
Private Sub Form_Load()
Dim vI As Long
Dim vJ As Long
Dim vX As Long
Dim vY As Long
Me.WindowState = 2
Me.Show
Label1(0).Move 0, 0, 180, 180
vX = (Me.Width - 120) \ 210 + 1
vY = (Me.Height - 630) \ 210 + 1
vJ = vX * vY - 1
For vI = 1 To vJ
Load Label1(vI)
Label1(vI).Move (vI Mod vX) * 210, (vI \ vX) * 210, 180, 180
Label1(vI).Visible = True
Next
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lbl As Label
For Each lbl In Label1
lbl.BackColor = vbRed
Next
End Sub
Private Sub Label1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lbl As Label
For Each lbl In Label1
lbl.BackColor = IIf(lbl.Index = Index, vbBlue, vbRed)
Next
End Sub

用户体验并不是很好,特别是MouseMove这种频繁性事件,以上纯属个人建议……

读书人网 >VB

热点推荐