|
分類:[C#]
プリ太です。
環境はWinXP VS2005です。
DataGridViewコントロール上でスペースキーを押されたら、クリックイベントを呼びたいのですが、どうすればよいのでしょうか?
クリックイベントで、クリックされたセルの色を変更しています。 キー入力では、スペースのみ受け付け、その場合もクリックされたのと同じ動作をさせようとしています。 グリッドのキー入力は、EditingControlShowingイベントから、 テキストボックスのKeyPressイベントを元に作成した自作のキー入力判定関数を読んで判定しています。 以下が作成した関数です。 void dgv_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (e.Control != null) { TextBox tb = (TextBox)e.Control; tb.KeyPress += new KeyPressEventHandler(KeyPress_Space); } } private void KeyPress_Space(object sender, KeyPressEventArgs e) { // Space以外入力させない if (e.KeyChar != ' ') { e.Handled = true; } else { int nIndex = -1; for (int i = 0; i < aDGV.Length; i++) { if (aDGV[i].Equals(sender)) { nIndex = i; break; } } //Clickイベント Call_Click(sender, aDGV[nIndex].CurrentCell.ColumnIndex, aDGV[nIndex].CurrentCell.RowIndex);
e.Handled = true; } } Call_Clickは、クリックイベントで行う処理を取り出したものです。 private void Call_Click(object sender,int nCol,int nRow) { int nIndex = -1; for (int i = 0; i < aDGV.Length; i++) { if (aDGV[i].Equals(sender)) { nIndex = i; break; } }
if (aDGV[nIndex][nCol, nRow].Style.BackColor == mCommon.BIT_HIGH) { aDGV[nIndex][nCol, nRow].Style.BackColor = mCommon.BIT_LOW; aDGV[nIndex][nCol, nRow].Style.SelectionBackColor = mCommon.BIT_LOW; } else { aDGV[nIndex][nCol, nRow].Style.BackColor = mCommon.BIT_HIGH; aDGV[nIndex][nCol, nRow].Style.SelectionBackColor = mCommon.BIT_HIGH; } }
クリックイベントからCall_Clickは問題なく呼べました。 KeyPress_SpaceからCall_Clickを呼ぶとsenderを使って配列に格納しているグリッドのインデックスを調べようとすると見つけることができません。 同じobject型なのでそのまま使えると思ったのですが、違うのでしょうか?
それとも、もっと簡単にクリックイベントを呼ぶ方法があるのでしょうか?
宜しくお願いします。
|