none
AutoCompleteを有効にして半角カナを入力しても一覧に出てこないデータがある RRS feed

  • 質問

  • ComboBoxのAutoCompleteを有効にして

    半角カナを入力しても一覧に出てこないデータがあるのですが

    一覧に出てくるデータをすべて表示させる方法はないでしょうか?

     

    下記の設定の時に「ジ」と入力すると候補一覧へは16行を表示させたいのですが

    「シ」で始まる単語を登録すると10行しか表示されなくなりました。

    【設定内容】

    AutoCompleteMode=Suggest

    AutoCompleteSource=CustomSource

    AutoCompleteCustomSource=(ジで始まる単語:16単語を登録/シで始まる単語:1単語を登録)

    ジア
    ジイ
    ジウ
    ジエ
    ジオ
    ジアア
    ジアイ
    ジアウ
    ジアアアアアアアアアアアア
    ジヤガヤ
    ジムメモ
    ジムガムメモ
    ジギ
    ジリレオ
    ジムショ
    ジドウシャ
    シスセソ

    2010年5月28日 10:26

回答

  • 確かに再現しますし理屈も分かりますが、組み込みのオートコンプリート機能を使う限り対応は不可能でしょう。

    ちなみに理屈は以下の通り。

    オートコンプリートに表示される文字列コレクションは自動的にソートされます。このとき、濁点は無視されて並べられるので、「ジギ」「シスセソ」「ジドウシャ」という順番になります。このソートを行わせない方法、あるいはソートをカスタムする方法はありません。

    次に絞り込みの段階ですが、まず上記のようにソートされたコレクションのうち、先頭一致する最初の要素を検索します。「ジ」が入力されていた場合、最初に一致する要素はコレクションの先頭である「ジア」ですね。で、そこから一致しない要素を探します。ここで比較に使用する関数は、ソートのときに使用する比較関数と異なるようで、濁点を無視しません。なので、「シスセソ」は「ジ」から始まっていないと判定されます。ソート済みですからそれ以降も当然一致しないはずなので、それ以上検索は続けず、結局「ジギ」までしか一致したと判断されなくなり、「ジドウシャ」以降は一致と見なされなくなります。

    • 回答としてマーク 山本春海 2010年6月3日 6:43
    2010年5月28日 14:34

すべての返信

  • 確かに再現しますし理屈も分かりますが、組み込みのオートコンプリート機能を使う限り対応は不可能でしょう。

    ちなみに理屈は以下の通り。

    オートコンプリートに表示される文字列コレクションは自動的にソートされます。このとき、濁点は無視されて並べられるので、「ジギ」「シスセソ」「ジドウシャ」という順番になります。このソートを行わせない方法、あるいはソートをカスタムする方法はありません。

    次に絞り込みの段階ですが、まず上記のようにソートされたコレクションのうち、先頭一致する最初の要素を検索します。「ジ」が入力されていた場合、最初に一致する要素はコレクションの先頭である「ジア」ですね。で、そこから一致しない要素を探します。ここで比較に使用する関数は、ソートのときに使用する比較関数と異なるようで、濁点を無視しません。なので、「シスセソ」は「ジ」から始まっていないと判定されます。ソート済みですからそれ以降も当然一致しないはずなので、それ以上検索は続けず、結局「ジギ」までしか一致したと判断されなくなり、「ジドウシャ」以降は一致と見なされなくなります。

    • 回答としてマーク 山本春海 2010年6月3日 6:43
    2010年5月28日 14:34
  • 返信ありがとうございます。

     

    なるほど。確かに上記のような結果になっていますね。

    設定によってはちゃんと動くようになるんじゃないかとも考えていたので、原因がはっきりして助かりました。

    あとは組み込みのオートコンプリート機能を使うかどうかの選択になりそうです。

    (組み込み以外でのオートコンプリート機能があるのかは分からないので調べてみます)

    ありがとうございました。

    2010年5月31日 2:00