C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

DataGridViewキー入力でクリックイベントを呼びたい


(過去ログ 64 を表示中)

[トピック内 1 記事 (1 - 1 表示)]  << 0 >>

■37299 / inTopicNo.1)  DataGridViewキー入力でクリックイベントを呼びたい
  
□投稿者/ プリ太 (24回)-(2009/06/16(Tue) 19:26:58)

分類:[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型なのでそのまま使えると思ったのですが、違うのでしょうか?

それとも、もっと簡単にクリックイベントを呼ぶ方法があるのでしょうか?

宜しくお願いします。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -