設定しました
EditMode = DataGridViewEditMode.EditProgrammatically;
編集モードを開始するためにシングルクリックを繰り返したくないので、DataGridViewで。(これは他のすべてのEditMode設定で発生します)。
これで、OnKeyDownをオーバーライドし、BeginEditを呼び出して、ユーザーが入力しているときにセルの編集を開始しました。
protected override void OnKeyDown(KeyEventArgs e)
{
BeginEdit(true);
base.OnKeyDown(e);
}
問題は、イベント処理が最初のキー押下を飲み込んだように見えるか、BeginEditの呼び出しが遅すぎることです。
問題を示す新しいVSC#プロジェクトに貼り付けることができるコードを次に示します。(貼り付けるときに、生成された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);
}
}