[英]How can I catch the autosize double-click event on a listview in VB.NET?
我正在使用Visual Studio 2008和VB.NET。 我的表單上有一個listview控件,我使用windows窗體設計器添加了列。 如您所知,如果雙擊sizer或divider或者要在兩列之間調用它的任何內容,左側的列將自動調整大小(除非您禁用它)。 我怎樣才能抓住這個具體事件? ColumnWidthChanged
事件和DoubleClick
事件可能是候選者,但在ColumnWidthChanged
事件中,我無法確定它是否是自動調整大小。 同樣,沒有簡單的方法可以捕獲與DoubleClick
事件完全相同的內容。 有沒有人有任何想法我怎么能抓住這個特定的事件類型?
檢測listview標題上的事件非常棘手。
您需要創建自己的標頭來替換它通常使用的標頭,然后收聽相應的消息。 據我所知,列調整大小句柄沒有任何特定的。
以下類是ListView的子類,並添加一個檢測列之間雙擊的處理程序。 我認為這就像它一樣接近。
我希望它能幫到你一些。
Class MyListView
Inherits ListView
Protected Overrides Sub CreateHandle()
MyBase.CreateHandle()
New HeaderControl(Me)
End Sub
Private Class HeaderControl
Inherits NativeWindow
Private _parent As ListView = Nothing
<DllImport("User32.dll", CharSet := CharSet.Auto, SetLastError := True)> _
Public Shared Function SendMessage(hWnd As IntPtr, msg As Integer, wParam As IntPtr, lParam As IntPtr) As IntPtr
End Function
Public Sub New(parent As ListView)
_parent = parent
Dim header As IntPtr = SendMessage(parent.Handle, (&H1000 + 31), IntPtr.Zero, IntPtr.Zero)
Me.AssignHandle(header)
End Sub
Protected Overrides Sub WndProc(ByRef message As Message)
Const WM_LBUTTONDBLCLK As Integer = &H203
Select Case message.Msg
Case WM_LBUTTONDBLCLK
Dim position As Point = Control.MousePosition
Dim relative As Point = _parent.PointToClient(position)
Dim rightBorder As Integer = 0
For Each c As ColumnHeader In _parent.Columns
rightBorder += c.Width
If relative.X > (rightBorder - 6) AndAlso relative.X < (rightBorder + 6) Then
MessageBox.Show([String].Format("Double-click after column '{0}'", c.Text))
End If
Next
Exit Select
End Select
MyBase.WndProc(message)
End Sub
End Class
End Class
您將需要包含一個使用System.Runtime.InteropServices; 聲明這項工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.