DataGridView焦点控制
来源:互联网 发布:电子软件开发工程师 编辑:程序博客网 时间:2024/05/20 17:07
WinForm自带的DataGridView不能对某些特定单元格进行能否获取焦点的控制的。通过重写DataGridView的DataGridView.OnKeyDown, DataGridView.ProcessDataGridViewKey, DataGridView.SetCurrentCellAddressCore, DataGridView.SetSelectedCellCore, DataGridView.OnMouseDown的方法可以实现对焦点的控制逻辑。
下面的示例通过通过重写DataGridView的SetCurrentCellAddressCore和SetSelectedCellCore的方法,实现控制DataGridView的某一列不能获取焦点。
部分代码:
public partial class RestrictFocusForm1 : Form { public RestrictFocusForm1() { InitializeComponent(); } private void RestrictFocusForm1_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("c1"); dt.Columns.Add("c2"); dt.Columns.Add("c3"); for (int j = 0; j < 10; j++) { dt.Rows.Add("aaa" + j.ToString(), "bbb"); } this.myDataGridView1.DataSource = dt; this.myDataGridView1.ColumnToSkip = 1; } } public class myDataGridView : DataGridView { private int columnToSkip = -1; public int ColumnToSkip { get { return columnToSkip; } set { columnToSkip = value; } } protected override bool SetCurrentCellAddressCore(int columnIndex, int rowIndex, bool setAnchorCellAddress, bool validateCurrentCell, bool throughMouseClick) { if (columnIndex == this.columnToSkip && this.columnToSkip != -1) { if (this.columnToSkip == this.ColumnCount - 1) { return base.SetCurrentCellAddressCore(0, rowIndex + 1, setAnchorCellAddress, validateCurrentCell, throughMouseClick); } else { if (this.ColumnCount != 0) { return base.SetCurrentCellAddressCore(columnIndex + 1, rowIndex, setAnchorCellAddress, validateCurrentCell, throughMouseClick); } } } return base.SetCurrentCellAddressCore(columnIndex, rowIndex, setAnchorCellAddress, validateCurrentCell, throughMouseClick); } protected override void SetSelectedCellCore(int columnIndex, int rowIndex, bool selected) { if (columnIndex == this.columnToSkip) { if (this.columnToSkip == this.ColumnCount - 1) { base.SetSelectedCellCore(0, rowIndex + 1, selected); } else { if (this.ColumnCount != 0) { base.SetSelectedCellCore(columnIndex + 1, rowIndex, selected); } } } else { base.SetSelectedCellCore(columnIndex, rowIndex, selected); } } }
转载请注明出处!!!
http://blog.csdn.net/stuqbx
- DataGridView焦点控制
- DataGridView焦点控制 --基本有效
- 设置 dataGridView 焦点位置
- dataGridView 点击 获取焦点
- DATAGRIDVIEW控制
- DATAGRIDVIEW控制
- DATAGRIDVIEW控制
- DATAGRIDVIEW控制
- DATAGRIDVIEW 禁止单元格焦点转移
- 【转】DATAGRIDVIEW控制
- DataGridView单元格代码控制
- 【转】DATAGRIDVIEW控制
- 【转】DATAGRIDVIEW控制
- 表单焦点控制
- android 焦点控制
- android 中 焦点控制
- andriod的焦点控制
- EditText焦点控制
- wav文件转mp3 单通道
- 自适应网页设计/响应式Web设计
- 一份linux运营试题,答案不全
- C++随机数生成方法(转载)
- DB2中SQLSTATE=57016 SQLCODE=-668,原因码 "7"的解决
- DataGridView焦点控制
- 路径动画
- Javascript刷新窗口的方法
- IBM笔试题2
- 排序算法——桶排序
- 内联汇编计算2个16进制的大数
- 多地雾霾空气污染严重
- make a vcard/vcal Ndef message on Android
- Hermite 与 Bezier 曲线的绘制