C# WinForms: Как написать конкретное письмо в ячейку таблицы данных, если нажата определенная клавиша?

Я (я новичок в C#) столкнулся с проблемой, которую пытался решить сам, но не смог найти решение.

учитывая: у меня есть Datagridview с 10 столбцами и х строк. (Заголовки столбцов достигают от 1 до 10)

Моя проблема: мне нужно только написать "1", "0" или "=" в ячейки, но для большей скорости заполнения при использовании цифровой клавиатуры я хотел бы автоматически записать "=" в текущую выбранную ячейку при нажатии 2 на Numpad.

Мое текущее решение (которое не работает):

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 ответа

Вы не ответили на мой комментарий, но я предполагаю, что это не работает, потому что событие не фиксируется. Когда сетка данных находится в режиме редактирования, элемент управления для редактирования ячеек получает ключевое событие, а не сетку данных.

Попробуйте добавить обработчик события для события EditingControlShowing, а затем используйте свойство 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...
    }

Обратитесь ниже код:

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

Надеюсь, это сработает для вас.

Вы можете попробовать этот метод, используя событие DataGridView.KeyDown:

private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.NumPad2) {
        this.CurrentCell.Value = "=";
    }
}
Другие вопросы по тегам