C#WinForms:如果按下某个键,如何将特定字母写入datagridview单元格?

时间:2015-07-24 09:13:05

标签: c# winforms datagridview key numpad

我(我在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但它不起作用。

非常感谢任何帮助!

3 个答案:

答案 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 = "=";
    }
}