いつも大変お世話になっております。
以下のプログラムは、エンターキーを押した際に右横のセルにフォーカスが移動するプログラムです。
(http://dobon.net/vb/dotnet/datagridview/enterkeymoveright.html を参照させて頂きました)
これを、エンターキーを押した際は右横のセルに移動し、マウスでセルを選んだ際は選択したセルにフォーカスが移るというプログラムに変更したいのですが、いい方法がなかなか思いつきません。
自分で考えていた方法としましては、
cellClickイベントでマウスクリック情報を感知し、マウスクリックを感知した場合は、
「SendKeys.Send("{UP}")・SendKeys.Send("{TAB}")」を制御しようと考えていたのですが、
cellClickイベントが起こるよりも、CellEndEditイベントの方が先に起こるので、この考えだとダメでした。
お手数おかけして申し訳ございませんが、どなた様かご指導ご鞭撻の程よろしくお願い致します。
//DataGridView1のKeyDownイベントハンドラ private void DataGridView1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { DataGridView dgv = (DataGridView)sender; //最終行最終列の場合は、何もしない(最終行最終列で //Tabキーを送信すると、次のコントロールにフォーカスが移動) if ((dgv.CurrentCellAddress.X == dgv.ColumnCount - 1) && (dgv.CurrentCellAddress.Y == dgv.RowCount - 1)) { return; } //Tabキーを送信する SendKeys.Send("{TAB}"); //フォーカスが下に移動しないようにする e.Handled = true; } } //DataGridView1のCellEndEditイベントハンドラ private void DataGridView1_CellEndEdit( object sender, DataGridViewCellEventArgs e) { DataGridView dgv = (DataGridView)sender; //最終行最終列の場合は、何もしない if ((e.ColumnIndex == dgv.ColumnCount - 1) && (e.RowIndex == dgv.RowCount - 1)) { return; } //最終行以外では、フォーカスを上に移動 //(最終行以外では、編集後、フォーカスが下に移動するため) if (e.RowIndex < dgv.RowCount - 1) { SendKeys.Send("{UP}"); } //Tabキーを送信する SendKeys.Send("{TAB}"); }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。