示例下载地址:http://download.csdn.net/source/950756
本组件演示如何实现DataGridView列标题的编辑。
使用效果如下,双击列标题即可编辑,失去焦点则恢复原始状态,可响应键盘方向键操作。
实现原理分析如下:
1、在组件中包含一个文本框,添加到界面上时设置为隐藏。
2、双击DataGridView控件的列标题时,获取列标题的坐标信息。
3、根据获取的坐标信息改变文本框的大小和位置,显示文本框以覆盖掉列标题,并在文本框中显示列标题文本。
4、文本框失去焦点后将文本框中的文本设置为正在编辑的列标题的文本。
5、根据按键进行更灵活的操作,比如左右移动编辑和确认输入
实现要点:
1、在DataGridView的ColumnHeaderMouseDoubleClick事件中实现编辑操作
2、计算坐标时需要考虑滚动条,滚动条滚动时需要同步移动文本框
3、用键盘移动编辑时需要考虑隐藏列不可编辑
类图如下:
组件有两个属性
EnableEdit(bool):是否允许编辑列标题
TargetControl(DataGridView):要编辑的目标DataGridView控件
实现了ISupportInitialize接口,在接口方法EndInit中实现组件的初始化和绑定目标控件的事件处理方法。
- public void EndInit()
- {
- if (m_TargetControl != null)
- {
- this.m_TargetControl.Parent.Controls.Add(this.rtbTitle);
- this.rtbTitle.BringToFront();
- this.ReloadSortedColumnList();
- m_TargetControl.ColumnHeaderMouseDoubleClick += new DataGridViewCellMouseEventHandler(TargetControl_ColumnHeaderMouseDoubleClick);
- m_TargetControl.ColumnDisplayIndexChanged += new DataGridViewColumnEventHandler(TargetControl_ColumnDisplayIndexChanged);
- m_TargetControl.Colu