DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridViewのIME制御

  • 題名: DataGridViewのIME制御
  • 著者: 焦げ太
  • 日時: 2012/06/07 10:25:47
  • ID: 30549
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[WindowsXP SP3 C#3.5SP1]
分類:[.NET]

こんにちは。

Windowsアプリを作成しているのですが、
下記事象が解決できず困っています。

(1)FormにTextBoxとDataGridViewを配置し、Tabオーダーを
TextBox→DataGridViewの順番にしておきます。
(2)DataGridViewの列をテキストボックスで一つ作成します。
列のプロパティはすべてデフォルトのままにします。
(3)DataGridViewのIMEModeをHiraganaにします。
(4)実行します。
(5)TextBoxにフォーカスがある状態です。DataGridViewに
マウスクリックで移動します。
(6)IMEを変更せず、ローマ字入力で「A」のキーを数回おします。
「あああああ」と入力されることを望んでいますが「aああああ」
と入力されてしまいます。

事象は画面表示(表示というよりは作成になるのか…)後の最初の
1回のみ発生します。

TABオーダーでDataGridViewが最初の場合は発生しません。
TextBox→DataGridViewへのフォーカス移動がTABキーによる移動
の場合は発生しません。

結構 使用されそうなケースに思えるのですが、ググってみても
同事象を見つけられませんでした。
解決方法をご存知でしたらお教えください。
2012/06/07(Thu) 11:09:38 編集(投稿者)

■No30549に返信(焦げ太さんの記事)
> (5)TextBoxにフォーカスがある状態です。DataGridViewに
> マウスクリックで移動します。
当方環境では、この時点で IME が使用不可(オンにできない状態)になっていました。

> 「あああああ」と入力されることを望んでいますが「aああああ」
> と入力されてしまいます。
DataGridView.EditMode = EditOnEnter にしておいては如何でしょう。

もしも EditMode を変更すると都合が悪いのであれば、
 if (dataGridView1.Rows.Count > 0 && dataGridView1.ColumnCount > 0)
  dataGridView1.CurrentCell = dataGridView1[0, 0];
のようなコードを Load イベントあたりに仕込んでみてください。

> 解決方法をご存知でしたらお教えください。
現象自体は初めて知りましたが、当方環境では、
上記の手法で現象を回避できました。
EXCELで起こる 詳細なテキストサービス の問題と似た現象ですね。

Windows XP SP3 上の Excel 2007 または Excel 2010 でコピーなどの特定の操作をすると、操作直後にセルに入力した最初の 1 文字が変換前に確定される
http://support.microsoft.com/kb/956425/ja

同じ対処で治まるかも知れません。
  • 題名: Re[3]: DataGridViewのIME制御
  • 著者: 焦げ太
  • 日時: 2012/06/07 11:43:26
  • ID: 30552
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
魔界の仮面弁士さま、jijiさま
早速のご回答ありがとうございます。

魔界の仮面弁士さまにお教えいただいた下記の方法で
思うように動作いたしました。

> if (dataGridView1.Rows.Count > 0 && dataGridView1.ColumnCount > 0)
>  dataGridView1.CurrentCell = dataGridView1[0, 0];

助かりました。ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板