2011-12-16 14 views
4

C#でイベントをは、OnKeyDown発生しません。 KeyUpイベントが発生します。しかしTabを押すと、次のセルが選択され、EditModeに変更されます。このセルでEnterキーを押すと、KeyUpイベントは発生せず、KeyPressも発生します。 私はそのユーザーが1つのセルから次のセルに移動できるようにしようとし、ユーザーはこのセルに何かを書くことができます。そしてユーザーがEnterを押すと、この値がデータベースに保存されます。しかし、セルがEditModeにあるとき、私はそのユーザーを検出できません。Enterを押します。の細胞は、私はOnKeyDownイベントをovveride自身のDataGridViewコントロールを作った

おかげ

答えて

4

あなたは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?

+0

は、私はあなたのinstruciontsに応じてコードを変更しました。 しかし、このコードは、押されたすべてのキーをEnterキーで実行します。私がEnterキーを押すと、これらのイベントは両方とも起動されません。そして、まだ1つの問題があります。 Enterキーを押してセルがEditModeの場合、行の選択は次の行に変更されます。 OnKeyDownでわかるように、e.SuppressKeyPress = trueを指定すると、ユーザーがEnterキーを押したときに行の選択を変更できなくなります。 – Robert

+0

@Robert私はコードを変更していません。コードを呼び出す必要があるイベントを変更しました。私は少しあなたのコードのロジックに混乱しています。あなたは説明できますか? – reggie

+0

@Robert入力時にデータをデータベースに保存する場合は、入力時に保存コードを実行するだけです。コード – reggie

関連する問題