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