我根据文章DataGridView keydown event not working in C#开发的一些代码有问题。
我想允许用户向 Dataviewgrid 控件添加一行,但发现启用AllowUserToAddRows
此功能会导致在新行的新单元格中键入第一个字符后立即显示额外的行。这会让我可怜的用户感到困惑,所以为了防止这种情况,我使用上面文章中的代码AllowUserToAddRows
在每次击键时立即禁用(尽管我希望只在输入第一个字符后才这样做)。但是,这似乎吞下了第一个输入的字符,即 它不会传递给基类进行处理。这是完整的代码:
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);
}
}
为什么我输入的第一个字符被吞下?我怎样才能防止这种情况发生?有没有比我编码的更好的方法?