// 获取鼠标点击的项------API [DllImport( " user32 " )] public static extern int GetScrollPos( int hwnd, int nBar); private TextBox txtInput; // 获取点击项的位置 private void listView1_MouseDoubleClick( object sender, MouseEventArgs e) Point point = new Point(e.X, e.Y); ItemPoint(point); catch (Exception ex) // 获取项的位置 public void ItemPoint(Point e) ListViewItem item = this .listView1.GetItemAt(e.X, e.Y); // 找到文本框 Rectangle rect = item.GetBounds(ItemBoundsPortion.Entire); int StartX = rect.Left; // 获取文本框位置的X坐标 int ColumnIndex = 0 ; // 文本框的索引 // 获取列的索引 // 得到滑块的位置 int pos = GetScrollPos( this .listView1.Handle.ToInt32(), 0 ); foreach (ColumnHeader Column in listView1.Columns) if (e.X + pos >= StartX + Column.Width) StartX += Column.Width; ColumnIndex += 1 ; if (ColumnIndex < this .listView1.Columns.Count - 1 ) return ; this .txtInput = new TextBox(); // locate the txtinput and hide it. txtInput为TextBox this .txtInput.Parent = this .listView1; // begin edit if (item != null ) rect.X = StartX; rect.Width = this .listView1.Columns[ColumnIndex].Width; // 得到长度和ListView的列的长度相同 this .txtInput.Bounds = rect; this .txtInput.Multiline = true ; // 显示文本框 this .txtInput.Text = item.SubItems[ColumnIndex].Text; this .txtInput.Tag = item.SubItems[ColumnIndex]; this .txtInput.KeyPress += new KeyPressEventHandler(txtInput_KeyPress); this .txtInput.Focus(); catch (Exception ex) // 回车保存内容 private void txtInput_KeyPress( object sender, KeyPressEventArgs e) if (( int )e.KeyChar == 13 ) if ( this .txtInput != null ) ListViewItem.ListViewSubItem lvst = (ListViewItem.ListViewSubItem) this .txtInput.Tag; lvst.Text = this .txtInput.Text; this .txtInput.Dispose(); catch (Exception ex) // 移动焦点,释放保存文本框内容 private void listView1_SelectedIndexChanged( object sender, EventArgs e) if ( this .txtInput != null ) if ( this .txtInput.Text.Length > 0 ) ListViewItem.ListViewSubItem lvst = (ListViewItem.ListViewSubItem) this .txtInput.Tag; lvst.Text = this .txtInput.Text; this .txtInput.Dispose(); catch (Exception ex) #endregion