2008/11/08(Sat) 07:44:44 編集(投稿者)
ほぼ動作は達成できたのですが、1つ問題が発覚してしまいました。
datagridviewに"text","text2","text3"という列を用意して、列毎に色々制限をかけようとしていまして、
以下のようなコーディングを行ったのですが、
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
//表示されているコントロールがDataGridViewTextBoxEditingControlか調べる
if (e.Control is DataGridViewTextBoxEditingControl)
{
DataGridView dgv = (DataGridView)sender;
//編集のために表示されているコントロールを取得
DataGridViewTextBoxEditingControl tb =
(DataGridViewTextBoxEditingControl)e.Control;
//イベントハンドラを削除(何度も追加されるのを防ぐ為)
tb.KeyPress -= new KeyPressEventHandler(tb_KeyPress);
tb.TextChanged -= new EventHandler(tb_TextChanged);
//列によってIMEのモードを変更する
switch (dgv.CurrentCell.OwningColumn.Name)
{
case "text":
//KeyPressイベントハンドラを追加 DOBON セルが編集中の時にキーイベントを捕捉する(参考)
tb.KeyPress += new KeyPressEventHandler(tb_KeyPress);
tb.TextChanged += new EventHandler(tb_TextChanged);
break;
case "text2":
tb.ImeMode = ImeMode.AlphaFull;
break;
case "text3":
tb.ImeMode = ImeMode.Katakana;
break;
default:
MessageBox.Show("テスト");
break;
}
}
}
private void tb_KeyPress(object sender, KeyPressEventArgs e)
{
//数字しか入力できないようにする
if (e.KeyChar < '0' || e.KeyChar > '9')
{
e.Handled = true;
}
}
private void tb_TextChanged(object sender, EventArgs e)
{
MessageBox.Show("イベント発生");
}
text列からtext2列に移って入力したとき、1回目の入力時、tb_TextChangedイベントが発生してしまいます。
tb_KeyPressも発生しているようで、1回目の入力時、数字のみではないのですが半角英数字が入ってしまいます。
2回目からはImeModeで指定した通り、全角英数字指定になり(入力制限は行っていませんが)、
tb_TextChangedイベントも発生しません。
text2列からtext3列に移って入力したときも同様な現象が起こり、1回目に全角英数字が入ってしまい、
2回目からはちゃんとカタカナ指定になります。
ちゃんと1回目から、アクティブ中の列に指定した通りに入力できるようにしたいのです。
イベントのタイミングの問題なのかなと思い、色々試してみましたが、思うように動作せず。
参考になるページ、どうすればよいのかご教授ください。お願いします orz