0

私はVBプロジェクトに座っており、3つのセルを持つListViewを持っています。チェックボックス、名前、および別のテキスト値。最後のセルをユーザーが編集できるようにしたい。2番目のセルも編集可能で問題ありません。問題はありません。

セルを編集可能に設定するにはどうすればよいですか?

今、私はリストボックスを埋めるためにこのコードを持っています:

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

ユーザーが最後の(または2番目と最後の両方の)セルを変更できるようにするためのヒントはありますか?

4

4 に答える 4

6

Winforms ListView コントロールは、DataGrid のようには使用できません。
プロパティ LabelEdit=True を設定すると、最初のアイテムのみが編集可能になります。

詳細モードで ListView の「セル」を編集できるようにしたい場合は、次の 2 つの方法があります。

  • DataGrid に切り替える
  • ネット上で無料で利用できる多くの拡張機能のいずれかを使用します (例はここにあります) 。
于 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 に答える