オートコンプリートを実装する

VS.NETを使っているとインテリセンスが大変便利です。インテリセンスの基礎となっているオートコンプリートはCOMとして機能がOSに搭載されているので、呼び出してやれば簡単に実装できます。

URLやファイル名だけのオートコンプリートはさらに簡単。.NETでいきまっしょいのid:santamartaさんが、
http://d.hatena.ne.jp/santamarta/20041205
に書いています。すばらしい!


URLやファイル名だけのときはこれが機能豊富でベストなのですが、あらかじめ決まった文字列でオートコンプリートしたいときは IAutoComplete と IAutoComplete2 を使う必要があります。こいつらに IEnumString を渡してやればOKです。

IEnumString は System.Runtime.InteropServices に UCOMIEnumString としてインターフェイスが用意されています。後は IAutoComplete 周りなのですが、VBForums.comにきっちり動くコードを発見しました。

http://www.vbforums.com/showthread.php?p=1619910#post1619910

ばっちり動くので、ライブラリとして使ってしまえばそれだけでOKですね!


ちなみに、私はこのコードが一部理解できませんでした…。COMとの相互運用部分がまだあんまり分かってないです。IAutoCompleteを取ってきてInitを呼ぶのはいいんですが、IAutoComplete2に変換するような処理なしでそのままSetOptionsを呼べちゃうのが理解不能です。

IAutoComplete2 インターフェイスの定義にも IAutoComplete の Init と Enable が含まれているし…。
COMがいまいちよく分かってませんが、とりあえずこれでオートコンプリートできますね〜!
(追記:GUIDは正しかったので、指摘箇所を削除しました)