我正在使用Visual Studio 2008和VB.NET。我在窗體上有一個listview控件,並且使用windows窗體設計器添加了列。如你所知,如果你雙擊sizer或divider或者任何你想在兩列之間調用它的東西,左邊的列會自動調整大小(除非你禁用它)。我怎樣才能抓住這個特定的事件? ColumnWidthChanged
事件和DoubleClick
事件可能是候選人,但在ColumnWidthChanged
事件中,我無法確定它是否是自動大小。同樣,沒有簡單的方法來捕獲與DoubleClick
事件完全匹配的內容。有沒有人有任何想法,我怎麼可以趕上這種特定的事件類型?如何在VB.NET中的listview上捕獲autosize雙擊事件?
回答
在列表視圖的頭部檢測事件非常棘手。
您將需要創建自己的標題來替換它通常使用的標題,然後聽取相應的消息。據我所知,沒有任何特定的列調整大小手柄。
以下類的子類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;聲明這個工作。
啊,我剛剛意識到你正在尋找一個VB.NET解決方案。儘管將代碼轉換爲VB.NET應該不難。對於那個很抱歉! – 2011-05-22 10:33:29
我已經使用http://www.developerfusion.com/tools/convert/csharp-to-vb/ – 2011-05-22 10:40:29
將我的C#示例轉換爲VB.NET。我喜歡你的答案,但我決定使用不同的控件來避免這種瘋狂。不值得頭痛。 – DynamiteReed 2011-12-06 23:37:45
- 1. 如何在ListView中捕獲事件?
- 2. 如何捕獲列表和標籤上的雙擊事件
- 3. 如何在ListView中添加ComboBox在鼠標上雙擊事件
- 4. jqPlot - 如何捕捉雙擊事件
- 5. 捕獲雙擊托盤圖標事件
- 6. 雙擊窗體事件VB.NET
- 7. WPF的ListView ScrollViewer中雙擊事件
- 8. 在Android的Listview中捕獲TextChanged事件
- 9. 在ngTable中捕獲雙擊
- 10. Android:如何捕捉文本上的全局雙擊事件?
- 11. 在VB.NET中捕獲按鍵事件
- 12. 在圖表上單擊捕獲事件
- 13. 如何捕獲GWT HorizontalSplitPanel雙擊事件
- 14. 如何在ListView對象中禁用雙擊事件?
- 15. 如何獲得TSpeedButton的雙擊事件。
- 16. 如何防止在ListView上雙擊?
- 17. 如何在視頻流的picturebox上獲得雙擊事件
- 18. 如何在Google地圖的標記上獲得雙擊事件
- 19. Vb.net中的AutoSize DataGridView
- 20. java - 捕獲托盤中圖標的雙擊事件
- 21. 在ListView上捕獲
- 22. 如何捕獲右鍵單擊事件?
- 23. 如何在C++上捕獲CLR事件
- 24. 如何捕獲ListView中的複選框事件
- 25. 用雙擊打開listview項目vb.net
- 26. 如何在點擊BreadcrumbBar中的項目時捕獲事件?
- 27. Google地圖,如何捕獲POI上的右鍵單擊事件
- 28. 捕獲點擊事件
- 29. 捕獲點擊事件
- 30. 點擊事件沒有被捕獲的ListView項與HorizontalScrollView
當他們雙擊標題時,你打算提供什麼功能?我不知道有什麼方法(希望別人會),我只是好奇。 – 2011-05-09 22:23:52
我有一個自定義算法來縮寫特定列中的數據,並且當用戶雙擊該標題的分隔符時,我需要捕獲它,以便我可以在該列下簡化數據。 – DynamiteReed 2011-05-10 13:53:43