我已经设置了
EditMode = DataGridViewEditMode.EditProgrammatically;
在我的DataGridView上因为我不想重复单击以启动编辑模式。 (这与所有其他EditMode设置一起发生)。
现在我已经覆盖OnKeyDown并调用BeginEdit来在用户输入时开始编辑单元格。
protected override void OnKeyDown(KeyEventArgs e)
{
BeginEdit(true);
base.OnKeyDown(e);
}
问题在于事件处理似乎吞下了第一个按键,或者可能太晚调用了BeginEdit。
以下是一些代码可以粘贴到一个演示该问题的新VS C#项目中。 (只需在粘贴时替换生成的Form1定义。)
public class MyDataGridView : DataGridView
{
public MyDataGridView()
{
this.EditMode = DataGridViewEditMode.EditProgrammatically;
}
protected override void OnKeyDown(KeyEventArgs e)
{
BeginEdit(true);
base.OnKeyDown(e);
}
}
public partial class Form1 : Form
{
private System.Windows.Forms.DataGridView dataGridView1;
public Form1()
{
this.dataGridView1 = new MyDataGridView();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
this.SuspendLayout();
this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.Controls.Add(this.dataGridView1);
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
this.ResumeLayout(false);
this.dataGridView1.Columns.Add("", "foo");
this.dataGridView1.Columns.Add("", "bar");
this.dataGridView1.Rows.Add(3);
}
}
答案 0 :(得分:2)
您可以尝试重写OnKeyPress事件并发送已按下的键:
protected override void OnKeyPress(KeyPressEventArgs e) {
if (!IsCurrentCellInEditMode) {
BeginEdit(true);
SendKeys.Send(e.KeyChar.ToString());
}
base.OnKeyPress(e);
}