我想在listbox控件中按右键弹出一个编辑菜单,但是做好后发现无论你在listbox控件中的任何位置点右键都弹出此菜单,感觉不好。我的意思是想在有内容的地方点右键才能弹出菜单,并且这个内容在点右键时也高亮。请大家帮忙。
我的弹出右键代码如下:
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
PopupMenu menu1
End If
End Sub
其中menu1菜单已经做好了。关键是何时应该弹出和内容高亮问题
我的弹出右键代码如下:
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
PopupMenu menu1
End If
End Sub
其中menu1菜单已经做好了。关键是何时应该弹出和内容高亮问题
解决方案 »
- 用getElementById实现自动登录,元素本身就没有id也没有name,那怎么办?
- 大哥们,如何在WIN98读出硬盘号
- 如何用API控制ComboBox的下拉列表框的高度(不是宽度)让他下拉的内容显示的更多一些!
- winsock问题 对不起大家了,我只有10分了
- 如何获的程序的句柄?
- ......求图书馆管理系统开发文档......
- 要加入条形码,应该用什么控件?可以到哪里下载?
- 请问,用DataReport做打印,预览时如何让 “打印”按钮不可用
- 急需用VB读www.123.com上的access数据库的资料,快快抓紧时间!!!
- 请问如何把字符串123变成数字123
- 知道窗体的句柄,如何在其他程序中的返回窗体变量
- 请教:
listbox提供了相应的消息,不用进行子类处理:Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As _
Any, dest As Any, ByVal numBytes As Long)
Const LB_ITEMFROMPOINT = &H1A9
Function ListBoxItemFromPoint(hwnd As Long, ByVal X As Long, ByVal Y As Long) As Long
Dim lParam As Long
lParam = X
CopyMemory ByVal VarPtr(lParam) + 2, Y, 2
ListBoxItemFromPoint = SendMessage(hwnd, LB_ITEMFROMPOINT, 0, ByVal lParam)
End FunctionPrivate Sub Form_Load()
Dim i As Long
For i = 1 To 50
List1.AddItem "line " + CStr(i)
Next
End SubPrivate Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then
Dim ItemIndex As Long
ItemIndex = ListBoxItemFromPoint(List1.hwnd, ScaleX(X, vbTwips, vbPixels), ScaleY(Y, vbTwips, vbPixels))
If ItemIndex > 32767 Then
Exit Sub
End If
List1.ListIndex = ItemIndex
PopupMenu menu1
End If
End Sub
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const LB_ITEMFROMPOINT = &H1A9Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim pos As Long, idx As Long
pos = X / Screen.TwipsPerPixelX + Y / Screen.TwipsPerPixelY * 65536
idx = SendMessage(List1.hWnd, LB_ITEMFROMPOINT, 0, ByVal pos)
' idx 即等于鼠标所在位置的选项
If idx < 65536 And Button = 2 Then
List1.ListIndex = idx
PopupMenu menu
End If
End SubPrivate Sub Command1_Click()
Static i
i = i + 1
List1.AddItem "text" & i
End Sub