0

我坐在一个 VB 项目中,我有一个带有 3 个单元的 ListView;一个复选框、一个名称和另一个文本值。我希望最后一个单元格可供用户编辑。第二个单元格也可以编辑,完全没有问题。

如何将单元格设置为可编辑?

现在我有这个代码来填充列表框:

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

任何提示如何让用户更改最后一个(或第二个和最后一个)单元格?

4

4 回答 4

6

Winforms ListView 控件不能像 DataGrid 一样使用。
只有第一个项目可以通过设置属性 LabelEdit=True 进行编辑。

如果您真的希望能够在详细模式下编辑 ListView 的任何“单元格”,您有两种可能性:

  • 切换到数据网格
  • 使用网络上免费提供的众多扩展之一(可以在此处找到示例)
于 2012-04-24T13:20:02.200 回答
0

您不能编辑列表视图中的特定行,但可以删除,然后重新添加值。不幸的是,我不知道如何将多个单元格添加到同一行,但知道如何在列表视图控件中删除和添加单个列单元格。也许这可能是一个开始。

Dim item As ListViewItem = ListView1.SelectedItems(0)
Dim intIndex As Integer = item.Index

item.Remove()
ListView1.Items.Insert(intIndex, "New Text")
于 2014-07-22T16:02:43.840 回答
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

于 2015-01-03T10:20:45.597 回答
0

有办法获取当前选定的项目,然后在 ListViewItem 上使用 BeginEdit() 调用。调度更改: ListView.AfterLabelEdit 事件

于 2018-11-30T07:26:55.500 回答