我(我在C#上相当新)遇到了一个问题,我试图解决自己,但无法找到解决方案。
下式给出: 我有一个包含10列和x行的Datagridview。 (标题栏从1到10)
我的问题: 我只需要在单元格中写入“1”,“0”或“=”,但是为了在使用Numpad时获得更高的填充速度,当我按下2时,我想自动在当前选定的单元格中写入“=”小键盘。
My Current解决方案(Wich不起作用):
private void dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
{
if(e.KeyChar == '2'||e.KeyChar.ToString() == "2")
{
dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[dataGridView1.CurrentCell.ColumnIndex].Value = "=";
}
}
我已尝试使用cellLeave和cellstatchanged但它不起作用。
非常感谢任何帮助!
答案 0 :(得分:1)
您没有回复我的评论,但我猜这不起作用,因为事件未被捕获。当datagridview处于编辑模式时,单元格编辑控件接收键事件,而不是datagridview。
尝试为EditingControlShowing事件添加事件处理程序,然后使用事件args的control属性为其键事件添加事件处理程序。
E.g
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
var ctrl = e.Control as TextBox;
if (ctrl == null) return;
ctrl.KeyPress += Ctrl_KeyPress;
}
private void Ctrl_KeyPress(object sender, KeyPressEventArgs e)
{
// Check input and insert values here...
}
答案 1 :(得分:0)
请参阅以下代码:
if (e.KeyChar == (char)Keys.NumPad2 || e.KeyChar == (char)Keys.Oem2)
{
dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[dataGridView1.CurrentCell.ColumnIndex].Value = "=";
}
希望这对你有用。
答案 2 :(得分:0)
您可以使用DataGridView.KeyDown事件尝试此方法:
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.NumPad2) {
this.CurrentCell.Value = "=";
}
}