Вы можете использовать событие EditingControlShowing
для DataGridView
, чтобы выполнить это.
В обработчике события этого события у вас есть доступ к Textbox
, которое отображается при вводе данных в сетку данных.
Это означает, что на этом этапе вы можете прикрепить обработчик событий к событию KeyPress
отображаемого текстового поля:
private bool _firstTime = true;
private void dataGridView1_EditingControlShowing( object sender, DataGridViewEditingControlShowingEventArgs e )
{
if( !_firstTime )
{
return;
}
_firstTime = false;
var t = e.Control as TextBox;
if( t != null )
{
t.KeyPress += OnKeyPress;
}
}
private void OnKeyPress( object sender, KeyPressEventArgs e )
{
if( e.KeyChar != 'A' && e.KeyChar != 'B' && e.KeyChar != 'C' )
{
e.Handled = true;
}
}
Поскольку DataGridView всегда будет «совместно использовать» элемент управления текстовым полем для каждой ячейки в сетке, в которой используются текстовые поля, необходимо проверить, происходит ли событие в первый раз.
Если у вас есть другие столбцы в DataGridView, которые не только для чтения, и где вы хотите, чтобы пользователь также вводил данные, что не ограничено, тогда этот подход не будет таким подходящим. (Если вы не проверите в обработчике события OnKeyPress
, к какому столбцу принадлежит текущая ячейка).
(Обратите внимание, что вам также придется рассмотреть строчные буквы a, b, c.