あなたはDataGridViewののEditingControlShowingイベントにKeyPressイベントまたはKeyUpイベントを呼び出す必要があります。このようなものが動作するはずです:
private void dtgrd1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
var txtEdit = (TextBox)e.Control;
txtEdit.KeyPress += EditKeyPress; //where EditKeyPress is your keypress event
}
private void EditKeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.SuppressKeyPress = true; //suppress ENTER
//SendKeys.Send("{Tab}"); //Next column (or row)
base.OnKeyDown(e);
}
else if (e.KeyCode == Keys.Tab)
{
base.OnKeyDown(e);
this.BeginEdit(false);
}
else
{
base.OnKeyDown(e);
}
}
このコードを実装する際に疑問がある場合は教えてください。
EDITは
入力に次の行に行く避けるために、この解決の問題をチェックしてください:How to prevent going to next row after editing a DataGridViewTextBoxColumn and pressing EnterKey?
は、私はあなたのinstruciontsに応じてコードを変更しました。 しかし、このコードは、押されたすべてのキーをEnterキーで実行します。私がEnterキーを押すと、これらのイベントは両方とも起動されません。そして、まだ1つの問題があります。 Enterキーを押してセルがEditModeの場合、行の選択は次の行に変更されます。 OnKeyDownでわかるように、e.SuppressKeyPress = trueを指定すると、ユーザーがEnterキーを押したときに行の選択を変更できなくなります。 – Robert
@Robert私はコードを変更していません。コードを呼び出す必要があるイベントを変更しました。私は少しあなたのコードのロジックに混乱しています。あなたは説明できますか? – reggie
@Robert入力時にデータをデータベースに保存する場合は、入力時に保存コードを実行するだけです。コード – reggie