自定义DataGridView中Enter键替代Tab键功能异常问题
自定义DataGridView按Enter键需两次才向右移动的问题
我自定义了一个DataGridView控件,期望按下Enter键时让单元格焦点向右移动,替代默认的下移行为。但实际运行时发现需要按两次Enter键才能实现右移:第一次按下时仍会执行默认的下移操作,第二次按下才会按照预期向右移动。
相关代码如下:
public partial class Paymentdatagridview : DataGridView { public Paymentdatagridview() { // 已设置EnableHeaderVisualStyles为false,让表头加粗 // 向自定义DataGridView添加列 DataGridViewColumn column1 = new DataGridViewTextBoxColumn(); column1.Name = "Column1"; column1.HeaderText = "Particulars"; column1.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; column1.SortMode = DataGridViewColumnSortMode.Automatic; this.Columns.Add(column1); DataGridViewColumn column2 = new DataGridViewTextBoxColumn(); column2.Name = "Column2"; column2.HeaderText = "Amount"; column2.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; column2.SortMode = DataGridViewColumnSortMode.Programmatic; this.Columns.Add(column2); this.AllowUserToAddRows = true; this.RowHeadersVisible = false; this.ColumnHeadersDefaultCellStyle.Font = new Font("Tahoma", 9.75F, FontStyle.Bold); this.CellBorderStyle = DataGridViewCellBorderStyle.None; InitializeComponent(); } protected override void OnEnter(EventArgs e) { // 控件获得焦点时,将当前单元格设为第一个单元格并启用编辑 if (RowCount > 0 && ColumnCount > 0) { CurrentCell = Rows[0].Cells[0]; BeginEdit(true); } base.OnEnter(e); } protected override bool ProcessDataGridViewKey(KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { // 按下Enter键时移动焦点到下一列或下一行 if (CurrentCell.ColumnIndex == ColumnCount - 1) { if (CurrentCell.RowIndex == RowCount - 1) { // 到达最后一个单元格,将焦点移到第一个单元格 CurrentCell = Rows[0].Cells[0]; } else { // 移到下一行的第一个单元格 CurrentCell = Rows[CurrentCell.RowIndex + 1].Cells[0]; } } else { // 移到下一列 CurrentCell = Rows[CurrentCell.RowIndex].Cells[CurrentCell.ColumnIndex + 1]; } BeginEdit(true); e.Handled = true; return true; } return base.ProcessDataGridViewKey(e); } }
内容的提问来源于stack exchange,提问作者Nisha Goel
相关产品推荐
相关产品推荐

