1

設定しました

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);
    }
  }
4

1 に答える 1

2

代わりに、OnKeyPressイベントをオーバーライドして、押されたキーを送信してみてください。

protected override void OnKeyPress(KeyPressEventArgs e) {
  if (!IsCurrentCellInEditMode) {
    BeginEdit(true);
    SendKeys.Send(e.KeyChar.ToString());
  }
  base.OnKeyPress(e);
}
于 2012-11-28T15:22:41.790 に答える