The only reasonable solution that is probably the best solution to use, is not to add a CheckBox control on top of the ListView, but to add images in the ColumnHeader of the ListView.
For this next piece of code to work properly, you will need to have 2 images of the CheckBox not Checked and Checked, and specify their location if different from "C:\".
1 ListView, 2 images(attached)
Public Class Form1
Private Sub designListView()
With ListView1
.Size = New Size(125, 125)
.Columns.Add("", 25) '// No Titled Column and sized for image of CheckBoxes.
.Columns.Add("Column 1", 100)
.Columns.Add("Column 2", 100, HorizontalAlignment.Center)
.View = View.Details : .CheckBoxes = True : .FullRowSelect = True
'// When adding Items, do not add it as the Item's.Text, Start adding at the first .SubItem of the Item.
Dim x As String = ",item1 subitem1,subitem2" : Dim lvItm As New ListViewItem(x.Split(","c)) : .Items.Add(lvItm)
x = ",item2 subitem1,subitem2" : lvItm = New ListViewItem(x.Split(","c)) : .Items.Add(lvItm)
x = ",item3 subitem1,subitem2" : lvItm = New ListViewItem(x.Split(","c)) : .Items.Add(lvItm)
End With
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
designListView() '// For TESTING.
Dim imgList As New ImageList With {.ImageSize = New Size(13, 13), .ColorDepth = ColorDepth.Depth32Bit} '// New ImageList.
Dim imgCheckedNot As Image = Image.FromFile("C:\checkedNot.png") '// image for Not Checked.
Dim imgChecked As Image = Image.FromFile("C:\checked.png") '// image for Checked.
'// Add 2 images to the ImageList.
imgList.Images.Add(imgCheckedNot) '// Add Not Checked Image first.
imgList.Images.Add(imgChecked) '// Add Checked Image.
ListView1.SmallImageList = …