ListView双击产生可编辑输入的TextBox(转)
2009-09-20 19:34
运用鼠标事件point 类 Point mousePos = new Point(0,0); 在ListView的鼠标事件下 private void listView1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) 然后对ListView的双击事件处理{ //record mouse position mousePos.X = e.X; mousePos.Y = e.Y; } //found clicked item ListViewItem item = listView1.GetItemAt(mousePos.X,mousePos.Y); //获取鼠标所点击在哪一列上 存在ListView产生滑块,这样就不能精确获得显示列的X,Y值,为获取滑块滑动的距离,可以使用API来得到 using System.Runtime.InteropServices; [DllImport("user32")] public static extern int GetScrollPos(int hwnd, int nBar) ; //locate text box 向ListView加载数据Rectangle rect = item.GetBounds(ItemBoundsPortion.Entire); int StartX = rect.Left; int ColumnIndex = 0; //get ColumnIndex //得到滑块的位置 int pos = GetScrollPos(this.listView1.Handle.ToInt32(),0); foreach (ColumnHeader Column in listView1.Columns) { if (mousePos.X + pos >=StartX + Column.Width) { StartX +=Column.Width; ColumnIndex += 1; } } //locate the txtinput and hide it. txtInput为TextBox txtInput.Parent = listView1; //begin edit if(item != null) { rect.X = StartX; rect.Width = listView1.Columns[ColumnIndex].Width; //得到长度和ListView的列的长度相同 txtInput.Bounds = rect; //show textbox txtInput.Text = item.SubItems[ColumnIndex].Text; txtInput.Visible = true; txtInput.Focus(); } ListViewItem item; foreach(DataRow dr in ds.Tables[0].Rows) { item = new ListViewItem(dr[0].ToString()); item.subItem.add(dr[1].ToString()); ListView.Item.Add(item); } |