- - PR -
ComboBoxで文字列を入力しても文字列の項目が選択されない
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-02-03 15:11
はじめまして、こんといいます。
.NET 2003 C#のComboBoxで困っていることがありますので質問させてください。 ComboBoxをDropDownList形式で作成し 文字列を入力したのですが、対象となる項目が選択されず 別の項目が選択されてしまいます。(一部の項目のみ) MSDNの 文書番号 : 814362 [PRB] 先頭の文字列を入力しても ComboBox コントロールの項目が選択されない に回避策が掲載されており実践したのですが上手くいきませんでした。 上記文書では下記のソースが載っているのですが、 // ComboBoxのKeyUpイベントに追加 searchstr = searchstr + Convert.ToChar(e.KeyCode); // If the Search string is greater than 1 then use custom logic if (searchstr.Length > 1) { int index; // Search the Item that matches the string typed index=comboBox1.FindString(searchstr); // Select the Item in the Combo comboBox1.SelectedIndex=index; } コンボボックスには日本語文字が入っており e.KeyCodeには1byte文字が入ってくるため日本語文字に変換される 前のアスキーコードが入ってきます。 (例えば山田と入力すると yamadaと順番に飛んでくる。しかし画面にはやまだ と入力されている。変換前) これが上手くいかない理由だと思うのですが。 これを回避して日本語文字とマッチングさせ対象となる 項目が選択されるように皆さんの知恵をお借りできたらいいなと思っています。 よろしくお願い致します。 | ||||
|
投稿日時: 2006-02-03 15:18
Key イベントである限りは、解決策はないですね。 yamada が「山田」なのか、「やまだ」なのか、「ヤマダ」なのかわかりませんから。 こんなの全部対応しきれませんよね。 入力が確定した後に任意のタイミングで検索するしかないと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-02-03 15:39
じゃんぬさんありがとうございます。
その任意のタイミングなのですが どこでそれをとればいいのでしょうか? 実はそれを試みようとしたのですがわかりませんでした。 SelectedIndexChangedイベントなどでは間違った選択位置の文字列を とってきます。(あたりまえなのですが。。。) 他にもValidatedなど色々試したのですがだめで。 どこで日本語を取ればいいのだろうと思っています。 | ||||
|
投稿日時: 2006-02-03 16:24
そもそも、日本語入力の場合は何もせずともその Item を選択してくれると思うんですが。
「山」と変換するときっちり「山田」を選択してくれます。 しかし、「やま」で「山」を検索するのは先ほども言ったように不可能です。 こんなの全部対応しきれません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-02-03 16:27
DropDownListだとつらいのではないですか? VB6でStyle=標準(入力可能)ですが応用ききませんか? 「PAPAn VBさん」 http://www.mitene.or.jp/~sugisita/vb6_ctl.html コンボボックスのオートコンプリート | ||||
|
投稿日時: 2006-02-03 18:04
返事が遅くなりました。すみません。
レスありがとうございます。 >> じゃんぬさん おっしゃるとおり殆どの文字は該当のItemを選択してくれます。 一部、ダメなものがあります。 例えば、、、 山田 西尾 小木曽 南 木場 東 と並んでいたとします。 小木曽と入力すると何故か木場に飛んでいってしまいます。。。 その他はきちんと該当のItemに飛んでいきます。 実際のデータは60件ほどあるのですが、その中で数件 このような現象が発生しています。 MSDNの文章を読むとなんとなくこのような現象が発生しても おかしくはないとは思いました。 -- 後、もちろんやまでは検索しません。 実際の例で記述しますと、 @ こぎそと入力 A 変換キーを押す。(小木曽に変換される) B ENTERを実行。 この時、小木曽に変換されているので この変換文字を取得するのはどこですればいいのだろう? と思っています。(ENTER押すと木場に飛んで行きますので) >> まどかさん まどかさん、ありがとうございます。 まだ見ていないのですが今から確認します。 結果は後ほど報告させて頂きます。 ありがとうございました! | ||||
|
投稿日時: 2006-02-03 18:22
これは最後に飛ばされた WCHAR で判別しているからですね。 小木山と入力すれば「山田」さんが選ばれるかと思います。 制御するのはちょっと面倒ですね。 WM_IME_CHAR を補足して色々やらなきゃいけないのかな。 こういう場合は、DropDownList ではなく DropDown の方が良いんでしょうね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-02-07 17:56
こんです。
遅くなりましたが報告いたします。 >> じゃんぬさん ありがとうございました。 IMEというキーワードをもとに色々調べさせていただきました。 それをもとにComboBoxを継承したクラスを作り WndProcをオーバーライドすることにより解決いたしました。 以下にIMEの文字列取得方法を記述したサイトがあったので 記述しておきます。 http://shinshu.fm/MHz/95.83/a02138/0000025041.html 1人では解決することができなかったので 色々アドバイスありがとうございました! 助かりました。 >> まどかさん プログラム拝見させて頂きました。 既に文字列を取得した前提のプログラムだったので 今回はつかえなかったのですがいつか使ってみようと思います。 ありがとうございました。 |
1