private void EditItem(object sender, EventArgs e)
        {
            ListViewCell cell = ListViewCellLocator.GetCell(this.ListView, MousePosition.X, MousePosition.Y);

            if (cell == null)
            {
                return;
            }

            if (TextBoxColumns.Contains(cell.Column.Index))
            {
                // 设置 EditBox 的位置、大小、内容、可显示等。
                EditBox.Bounds  = cell.Bounds;
                EditBox.Text    = cell.Item.SubItems[cell.Column.Index].Text;
                EditBox.Visible = true;
                EditBox.Focus();
                EditBox.Tag = cell;
            }
        }
        ///
        /// 根据位置 x、y 获得 ListViewCell。
        ///
        ///
        /// 工作区坐标表示的 x 轴坐标。
        /// 工作区坐标表示的 y 轴坐标。
        ///
        public static ListViewCell GetCell(ListView listView, int x, int y)
        {
            ListViewCell cell = new ListViewCell();

            // 获得单元格所在的行。
            cell.Item = listView.GetItemAt(x, y);
            if (cell.Item == null)
            {
                return(null);
            }
            cell.ItemIndex = cell.Item.Index; // 现在 Item.Index 还能用

            // 根据各列宽度,获得单元格所在的列,以及 Bounds。
            int currentX   = cell.Item.GetBounds(ItemBoundsPortion.Entire).Left; // 依次循环各列,表示各列的起点值
            int scrollLeft = GetScrollPos(listView.Handle.ToInt32(), 0);         // 可能出现了横向滚动条,左边隐藏起来的宽度

            for (int i = 0; i < listView.Columns.Count; i++)
            {
                if (scrollLeft + x >= currentX &&
                    scrollLeft + x < currentX + listView.Columns[i].Width)
                {
                    cell.Column = listView.Columns[i]; // 列找到了
                    Rectangle itemBounds = cell.Item.GetBounds(ItemBoundsPortion.Entire);
                    cell.Bounds = new Rectangle(currentX,
                                                itemBounds.Y,
                                                listView.Columns[i].Width,
                                                itemBounds.Height);
                    break;
                }
                currentX += listView.Columns[i].Width;
            }

            if (cell.Column == null)
            {
                return(null);
            }
            return(cell);
        }