首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

怎么在listView中添加Textbox

2013-04-20 
如何在listView中添加Textbox?在winform中利用listView显示数据, 想添加Textbox 然后将一列值显示在Textbo

如何在listView中添加Textbox?
         在winform中利用listView显示数据, 想添加Textbox 然后将一列值显示在Textbox中,  默认Textbox为不 可编辑状态   单击选中后  可以编辑          按回车 触发提交按钮

下面是我显示数据的代码



Private Sub MSShowData(ByVal obj As Object) Handles mMS.DataRecived
        If (Me.InvokeRequired) Then
            Me.Invoke(New RecivedDataHandler(AddressOf MSShowData), obj)
        Else
            Dim value As NewMSEncoder.MSData
            value = CType(obj, NewMSEncoder.MSData)

            With Me.ListView1
                .BeginUpdate()
                .Columns.Clear()
                .Columns.Add("项目", 160)
                .Columns.Add("值", 240)
                .Columns.Add("输入值", 240)
                .Items.Clear()

                Dim item As ListViewItem
                item = New ListViewItem(New String() {"值1", value.Value1.ToString("F2"),""})
                .Items.Add(item)
                item = New ListViewItem(New String() {"值2", value.Value2.ToString("F2"),"")})
                .Items.Add(item)
                item = New ListViewItem(New String() {"值3", value.Value3.ToString("F2"),"")})
                .Items.Add(item)
                item = New ListViewItem(New String() {"值4", value.Value4.ToString("F2"),""})
                .Items.Add(item)
                item = New ListViewItem(New String() {"值5", value.Value4.ToString("F2"),""})
                .Items.Add(item)
                item = New ListViewItem(New String() {"值6", value.Value5.ToString("F2"),""})
                .Items.Add(item)

                .EndUpdate()


            End   With

        End If
  End Sub

listView textbox winform
[解决办法]
最好的办法是自己写控件

Public Class Mylist : Inherits ListView

    Private m_currentLVItem As ListViewItem

    Private m_nX As Integer = 0

    Private m_nY As Integer = 0

    Private m_strSubItemText As String

    Private m_nSubItemSelected As Integer = 0

    Private EditBox As System.Windows.Forms.TextBox

    Private m_fontEdit As Font

    Private m_bgcolorEdit As Color



    Public Sub New()
        MyBase.New()
        SetStyle(ControlStyles.DoubleBuffer Or ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer, True)
        UpdateStyles()

        Mylist()
    End Sub



    Public Sub Mylist()


        EditBox = New System.Windows.Forms.TextBox()


        EditFont = Me.Font

        EditBgColor = Color.LightBlue

        AddHandler Me.MouseDown, AddressOf mxh_MouseDown
        '  Me.MouseDown += New System.Windows.Forms.MouseEventHandler(Me.SMKMouseDown)

        AddHandler Me.DoubleClick, AddressOf mxh_DoubleClick

        Me.GridLines = True



        EditBox.Size = New System.Drawing.Size(0, 0)

        EditBox.Location = New System.Drawing.Point(0, 0)

        Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.EditBox})
        AddHandler EditBox.KeyPress, AddressOf EditOver
        AddHandler EditBox.LostFocus, AddressOf FocusOver

        EditBox.AutoSize = True

        EditBox.Font = Me.EditFont

        EditBox.BackColor = Me.EditBgColor

        EditBox.BorderStyle = BorderStyle.FixedSingle

        EditBox.Hide()


        EditBox.Text = ""
    End Sub


    Public Property EditFont() As Font




        Get
            Return Me.m_fontEdit
        End Get

        Set(ByVal value As Font)


            Me.m_fontEdit = value


            Me.editBox.Font = Me.m_fontEdit
        End Set
    End Property




    Public Property EditBgColor() As Color


        Get
            Return Me.m_bgcolorEdit
        End Get

        Set(ByVal value As Color)


            Me.m_bgcolorEdit = value


            Me.editBox.BackColor = Me.m_bgcolorEdit
        End Set
    End Property


    Public Sub SetColumn(ByVal columnIndex As Integer, ByVal cs As M_ListViewColumnStyle)


        If columnIndex < 0 OrElse columnIndex > Me.Columns.Count Then

            Throw New Exception("超出列索引范围")
        End If

        DirectCast(Columns(columnIndex), M_ColumnHeader).ColumnStyle = cs

    End Sub





    Private Sub EditOver(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)


        If e.KeyChar = "13" Then


            m_currentLVItem.SubItems(m_nSubItemSelected).Text = EditBox.Text


            EditBox.Hide()
        End If



        If e.KeyChar = "27" Then

            EditBox.Hide()
        End If

    End Sub



    Private Sub FocusOver(ByVal sender As Object, ByVal e As System.EventArgs)


        m_currentLVItem.SubItems(m_nSubItemSelected).Text = editBox.Text

        editBox.Hide()

    End Sub



    Public Sub mxh_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs)


        ' Check the subitem clicked .

        Dim nStart As Integer = m_nX


        'current mouse down X position
        Dim spos As Integer = 0

        Dim epos As Integer = Me.Columns(0).Width

        For i As Integer = 0 To Me.Columns.Count - 1


            If nStart > spos AndAlso nStart < epos Then


                m_nSubItemSelected = i


                Exit For
            End If



            spos = epos


            epos += Me.Columns(i).Width
        Next



        m_strSubItemText = m_currentLVItem.SubItems(m_nSubItemSelected).Text


        Dim column As M_ColumnHeader = DirectCast(Columns(m_nSubItemSelected), M_ColumnHeader)
        If column.ColumnStyle = M_ListViewColumnStyle.EditBox Then


            Dim r As New Rectangle(spos, m_currentLVItem.Bounds.Y, epos, m_currentLVItem.Bounds.Bottom)

            EditBox.Size = New System.Drawing.Size(epos - spos, m_currentLVItem.Bounds.Height)

            EditBox.Location = New System.Drawing.Point(spos, m_currentLVItem.Bounds.Y)

            EditBox.Show()

            EditBox.Text = m_strSubItemText

            EditBox.SelectAll()


            EditBox.Focus()
        End If

    End Sub

    Public Sub mxh_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)


        m_currentLVItem = Me.GetItemAt(e.X, e.Y)

        m_nX = e.X

        m_nY = e.Y

    End Sub

End Class
Public Class M_ColumnHeader
    Inherits ColumnHeader


    Private cs As M_ListViewColumnStyle
    '本列的风格
    Public Sub New()
        MyBase.New()



        cs = M_ListViewColumnStyle.[ReadOnly]
    End Sub

    Public Sub New(ByVal _cs As M_ListViewColumnStyle)





        cs = _cs
    End Sub

    Public Property ColumnStyle() As M_ListViewColumnStyle


        Get
            Return cs
        End Get

        Set(ByVal value As M_ListViewColumnStyle)
            cs = value
        End Set
    End Property


End Class
Public Enum M_ListViewColumnStyle


    [ReadOnly]
    '只读
    EditBox
    '编辑状态下显示为文本框
End Enum


[解决办法]
调用

   Me.ListView1= New MSS.Mylist

Private Sub MSShowData(ByVal obj As Object) Handles mMS.DataRecived
        If (Me.InvokeRequired) Then
            Me.Invoke(New RecivedDataHandler(AddressOf MSShowData), obj)
        Else
            Dim value As NewMSEncoder.MSData
            value = CType(obj, NewMSEncoder.MSData)
 
            With Me.ListView1
                .BeginUpdate()
                .Columns.Clear()
 Dim header1 As New M_ColumnHeader(M_ListViewColumnStyle.[ReadOnly])
                header1.Width = 180
                header1.Text = "项目"
                .Columns.Add(header1)
                Dim header2 As New M_ColumnHeader(M_ListViewColumnStyle.[ReadOnly])
                header2.Width = 240
                header2.Text = "值"
                .Columns.Add(header2)
                Dim header3 As New M_ColumnHeader(M_ListViewColumnStyle.[ReadOnly])
                header3.Width = 240
                header3.Text = "输入值"
                .Columns.Add(header3)
                .FullRowSelect = True


                .Items.Clear()
 
                Dim item As ListViewItem
                item = New ListViewItem(New String() {"值1", value.Value1.ToString("F2"),""})
                .Items.Add(item)
                item = New ListViewItem(New String() {"值2", value.Value2.ToString("F2"),"")})
                .Items.Add(item)
                item = New ListViewItem(New String() {"值3", value.Value3.ToString("F2"),"")})
                .Items.Add(item)
                item = New ListViewItem(New String() {"值4", value.Value4.ToString("F2"),""})
                .Items.Add(item)
                item = New ListViewItem(New String() {"值5", value.Value4.ToString("F2"),""})
                .Items.Add(item)
                item = New ListViewItem(New String() {"值6", value.Value5.ToString("F2"),""})
                .Items.Add(item)
 
                .EndUpdate()
            End   With
 
        End If
  End Sub

热点排行