listview如何知道选中了那一列?并且能不能固定某些列宽(不是全部列宽)不可变化?
解决方案 »
- 导出Excel,单元格格式设置为字符串。自动换行。可是有一奇怪问题,当字符串特别多的时候,在Excel里就显示成了"#######"
- 各位大侠求救:为什么我用VB的Inet1控件连不上我本地的UNix服务器
- vb exe和vc exe如何交换大块数据
- 怎么样通过创建WORD 对象打开WORD 文档
- 请问win2000的api是否有升级,有的话,哪有下载?
- 用VB批量打开一些本机的word文档(这些文档是别人做的),插入一段宏,怎么实现
- VB除了Timer,Api能创建多线程,还有别的方法吗?
- 如何编程实现关机?
- 还是来问个webbrowser的问题,请指教
- 强烈要求斑竹将与编程无关的贴子转到灌水乐园去,同意的跟贴!
- 一个强制替换保存文件的问题?
- 检查网络连接
ListView1.SelectedItem.Width
MsgBox ColumnHeader '返回选择列的名字
End Sub
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 Const LVM_FIRST = &H1000&
Private Const LVM_GETSUBITEMRECT = LVM_FIRST + 56&
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Function ColumnByX(lv As ListView, x As Single) As Long
With lv
Dim org As RECT, ax As Long, i As Long
SendMessage .hwnd, LVM_GETSUBITEMRECT, i, org
ax = Me.ScaleX(x, vbTwips, Me.ScaleMode) - org.Left
For i = 1 To .ColumnHeaders.Count
ax = ax - .ColumnHeaders.Item(i).Width
If ax <= 0 Then
Exit For
End If
Next
If i > .ColumnHeaders.Count Then i = -1
End With
ColumnByX = i
End Function
Private Sub Form_Load()
Dim i As Integer
Dim itemx As ListItem
For i = 1 To 100
Set itemx = ListView1.ListItems.Add(, , CStr(i))
ListView1.ListItems(i).SubItems(1) = i
ListView1.ListItems(i).SubItems(2) = i
ListView1.ListItems(i).SubItems(3) = i
ListView1.ListItems(i).SubItems(4) = i
ListView1.ListItems(i).SubItems(5) = i
Next
End SubPrivate Sub ListView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
MsgBox ColumnByX(ListView1, x)
End Sub
http://www.vbcodemagician.dk/tips/cctrls_lvpreventresize.htm
都說是子類處理,但是就是沒有找到能夠用的-_-