Это на самом деле довольно просто реализовать при условии, что вы готовы перенести тяжелую работу P / Invoke для доступа к функциональности, встроенной в собственный элемент управления Windows, но не предоставляемой .NET FW.
Я демонстрирую в своем ответе здесь , как это можно сделать с помощью элемента управления TreeView, и учитывая, насколько ListView похож на TreeView, не должно быть особенно удивительным, что это можно сделать за оченьТо же самое с ListView.
Вот весь необходимый код (убедитесь, что вы добавили объявление Imports
для пространства имен System.Runtime.InteropServices
):
' P/Invoke declarations
Private Const LVIF_STATE As Integer = &H8
Private Const LVIS_STATEIMAGEMASK As Integer = &HF000
Private Const LVM_FIRST As Integer = &H1000
Private Const LVM_SETITEM As Integer = LVM_FIRST + 76
<StructLayout(LayoutKind.Sequential, Pack:=8, CharSet:=CharSet.Auto)> _
Private Structure LVITEM
Public mask As Integer
Public iItem As Integer
Public iSubItem As Integer
Public state As Integer
Public stateMask As Integer
<MarshalAs(UnmanagedType.LPTStr)> _
Public lpszText As String
Public cchTextMax As Integer
Public iImage As Integer
Public lParam As IntPtr
End Structure
<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByRef lParam As LVITEM) As IntPtr
End Function
''' <summary>
''' Hides the checkbox for the specified item in a ListView control.
''' </summary>
Private Sub HideCheckBox(ByVal lvw As ListView, ByVal item As ListViewItem)
Dim lvi As LVITEM = New LVITEM()
lvi.iItem = item.Index
lvi.mask = LVIF_STATE
lvi.stateMask = LVIS_STATEIMAGEMASK
lvi.state = 0
SendMessage(lvw.Handle, LVM_SETITEM, IntPtr.Zero, lvi)
End Sub
И тогда вы можете просто вызвать вышеуказанный метод следующим образом:
Private Sub btnHideCheckForSelected_Click(ByVal sender As Object, ByVal e As EventArgs)
' Hide the checkbox next to the currently selected ListViewItem
HideCheckBox(myListView, myListView.SelectedItems(0))
End Sub
Создание чего-то, что выглядит примерно так (после нажатия кнопки «Скрыть проверку» как для помидора, так и для огурца):
![Sample ListView, with checkboxes removed from individual items](https://i.stack.imgur.com/DBSnO.png)