#region listview 双击item进入编辑
//获取鼠标点击的项------API
[DllImport("user32")]
public static extern int GetScrollPos(int hwnd, int nBar);
private TextBox txtInput;
//获取点击项的位置
private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
try
{
Point point = new Point(e.X, e.Y);
ItemPoint(point);
}
catch (Exception ex)
{
}
}
//获取项的位置
public void ItemPoint(Point e)
{
try
{
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)
{
try
{
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)
{
try
{
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