主要是应用DataGridView的EditingControlShowing事件。当单元格进入编辑模式时,可以处理执行该编辑控件的自定义初始化的此事件。
public DataGridViewTextBoxEditingControl dgvTxt = null; // 声明 一个 CellEdit private void dgv2_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { dgvTxt = (DataGridViewTextBoxEditingControl)e.Control; // 赋值 dgvTxt.SelectAll(); dgvTxt.KeyPress += Cells_KeyPress; // 绑定到事件 } // 自定义事件KeyPress事件 private void Cells_KeyPress(object sender, KeyPressEventArgs e) { Kzjgsl.keyPressXS(e, dgvTxt); }
public static void keyPressXS(KeyPressEventArgs e, DataGridViewTextBoxEditingControl dgvTxt) { if (char.IsNumber(e.KeyChar) || e.KeyChar == '.' || e.KeyChar == (char)Keys.Back) { e.Handled = false; //让操作生效 int j = 0; int k = 0; bool flag = false; if (dgvTxt.Text.Length == 0) { if (e.KeyChar == '.') { e.Handled = true; //让操作失效 } } for (int i = 0; i < dgvTxt.Text.Length; i++) { if (dgvTxt.Text[i] == '.') { j++; flag = true; } if (flag) { if (char.IsNumber(dgvTxt.Text[i]) && e.KeyChar != (char)Keys.Back) { k++; } } if (j >= 1) { if (e.KeyChar == '.') { e.Handled = true; //让操作失效 } } if (k == 2) { if (char.IsNumber(dgvTxt.Text[i]) && e.KeyChar != (char)Keys.Back) { if (dgvTxt.Text.Length - dgvTxt.SelectionStart < 3) { if (dgvTxt.SelectedText != dgvTxt.Text) { e.Handled = true; ////让操作失效 } } } } } } else { e.Handled = true; } }