У меня проблема с некоторым кодом, который я разработал на основе статьи Событие нажатия клавиши DataGridView не работает в С#.
Я хотел разрешить пользователю добавлять строку в элемент управления Dataviewgrid, но обнаружил, что включение AllowUserToAddRows
приводит к отображению дополнительной строки, как только первый символ вводится в новую ячейку в новой строке. Это могло бы сбить с толку моего бедного пользователя, поэтому, чтобы предотвратить это, я использовал код из статьи выше, чтобы немедленно отключить AllowUserToAddRows
при каждом нажатии клавиши (хотя предпочел бы делать это только после ввода первого символа). Однако это, кажется, проглатывает 1-й введенный символ, т.е. он не передается базовому классу для обработки. Вот полный код:
public sealed class XDataGridView : DataGridView
{
private bool _singleUpdateOnly = true;
public bool SingleUpdateOnly
{
get { return _singleUpdateOnly; }
set { _singleUpdateOnly = value; }
}
[Description("Disallows user adding rows as soon as a key is struck to ensure no blank row at bottom of grid")]
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
if (SingleUpdateOnly)
{
AllowUserToAddRows = false;
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
Почему 1-й символ, который я набираю, проглатывается? Как я могу предотвратить это? Есть ли лучший способ, чем то, что я закодировал?