1

我(我是 C# 的新手)遇到了一个我试图自己解决但找不到解决方案的问题。

给定:我有一个 10 列和 x 行的 Datagridview。(列标题从 1 到 10)

我的问题:我只需要在单元格中写入“1”、“0”或“=”,但是为了在使用 Numpad 时加快填充速度,我想在按下时自动将“=”写入当前选定的单元格2 在数字键盘上。

我当前的解决方案(不起作用):

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 尝试过,但它不起作用。

4

3 回答 3

1

你没有回复我的评论,但我猜这不起作用,因为事件没有被捕获。当datagridview处于编辑模式时,单元格编辑控件接收到key事件,而不是datagridview。

尝试为 EditingControlShowing 事件添加事件处理程序,然后使用事件 args 的 control 属性为其关键事件添加事件处理程序。

例如

    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...
    }
于 2015-07-24T09:32:32.320 回答
0

请参考以下代码:

if (e.KeyChar == (char)Keys.NumPad2 || e.KeyChar == (char)Keys.Oem2)
{
     dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[dataGridView1.CurrentCell.ColumnIndex].Value = "=";
}

希望这对你有用。

于 2015-07-24T09:30:41.860 回答
0

您可以使用DataGridView.KeyDown事件尝试此方法:

private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.NumPad2) {
        this.CurrentCell.Value = "=";
    }
}
于 2015-07-24T09:35:41.023 回答