我正坐在VB项目中,我有一个包含3个单元格的ListView;复选框,名称和其他文本值。我希望最后一个单元格可以为用户编辑。第二个单元格也可以编辑,没有任何问题。
如何设置单元格可编辑?
现在我正在使用此代码来填充ListBox:
Dim row(3) As String
Dim itm As ListViewItem
Dim txtbox As New TextBox
row(0) = ""
row(1) = "some value"
row(2) = "0"
itm = New ListViewItem(row)
itm.SubItems.Add("txtbox")
ListView1.Items.Add(itm
如何让用户更改最后一个(或第二个和最后一个)单元格的任何提示?
答案 0 :(得分:6)
Winforms ListView控件不能像DataGrid一样使用 只有第一项可以设置属性LabelEdit = True。
如果您真的希望能够在详细模式下编辑ListView的任何“单元格”,您有两种可能:
答案 1 :(得分:0)
您无法编辑列表视图中的特定行,但可以删除,然后重新添加值。不幸的是,我不知道如何将多个单元格添加到同一行,但知道如何在listview控件中删除和添加单个列单元格。也许这可能是一个开始。
Dim item As ListViewItem = ListView1.SelectedItems(0)
Dim intIndex As Integer = item.Index
item.Remove()
ListView1.Items.Insert(intIndex, "New Text")
答案 2 :(得分:0)
编辑单元格有诀窍。您必须创建偏移文本框并将其放在要编辑的单元格的位置(命中测试,设置位置和大小)。
Dim iRow, iCol as Integer
Private Sub TextOverlay_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
ListView1.Items(iRow).SubItems(iCol).Text = TextOverlay.Text
End Sub
Private Sub ListView1_Click(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseClick
Dim hit As ListViewHitTestInfo = ListView1.HitTest(e.X, e.Y)
Dim iWidth As Integer
For iCol = 0 To hit.Item.SubItems.Count - 1
If hit.Item.SubItems(iCol).Bounds.Left <= e.X Then
If iCol = 0 And hit.Item.SubItems.Count > 1 Then
If e.X <= hit.Item.SubItems(1).Bounds.Left Then
iWidth = hit.Item.SubItems(1).Bounds.Left
Exit For
End If
ElseIf e.X <= hit.Item.SubItems(iCol).Bounds.Right Then
iWidth = hit.Item.SubItems(iCol).Bounds.Width
Exit For
End If
End If
Next
iRow = hit.Item.Index
TextOverlay.Left = ListView1.Left + hit.SubItem.Bounds.Left + 3
TextOverlay.Top = ListView1.Top + hit.SubItem.Bounds.Top
TextOverlay.Width = iWidth
TextOverlay.Height = 18
TextOverlay.Text = hit.SubItem.Text
TextOverlay.Visible = True
TextOverlay.ReadOnly = False
End Sub
答案 3 :(得分:0)
有一种方法可以获取当前选定的项目,然后在ListViewItem上使用BeginEdit()调用。 分发更改:ListView.AfterLabelEdit事件