2011-08-12 22 views
1

開発中のソフトウェアに研究機能を追加したいと考えています。アイデアは何らかの「索引付けされた」リサーチを追加することです。ユーザーがテキストボックスに別のタイプを入力すると、GUIコンポーネントはフィルタリングされた結果を表示します。例:インデックス付き検索機能

など。 確かにこの物は名前を持っています(ほとんどどこでも使用されています)が、私はそれを知らないので、今まではウェブ上で有用なものを見つけることができませんでした。私は正確なコード、いくつかのリソース(チュートリアルなど)への単なるリンクは必要ありません。 Ty。

EDIT:私はオートコンプリート機能を探していません:テキストボックスに入力すると、フィルタボックスの結果がテキストボックスの近くの(たとえば)リストボックスに表示されます。

+3

「オートコンプリート」のように聞こえます。 – David

+0

自動完成機能を探していますか?つまり、ユーザーがデータソースにインデックスを作成したり実際にインデックスを作成したりするときに、リスト内の要素を見つけますか?異なるもの。 – dotnetnate

+0

データベースを使用していますか? – bfavaretto

答えて

4

あなたがしようとしていることは、autocompleteと呼ばれています(またはそのバリエーションです。あなたはオンザフライでリストを単純にフィルタリングしています)。これは非常に一般的な機能です。

入力が形成されたときにリストを更新できる必要があるため、データをすばやく参照する必要があります。もちろん、入力はキーストロークの形で来る可能性があり、人によっては非常に速いタイピストです。

あなたのリストがメモリに格納されていて、それがやや小さいのであれば、おそらくあなたのベスト・ベットが検索基準のリストをフィルタリングするでしょう(これはボックスに入力されているものを参照します)。

リストがメモリに含まれていない場合は、何らかの理由でデータのインデックスを作成する必要があります。一般的に、データベースはこの種のものには適していません。一部のユーザーはテキストインデックスを作成しています(SQL Serverはそうしています)。

データベースを使用していない場合は、Lucene.NETを使用してコンテンツのインデックスを作成することを検討してください。コンテンツが十分に小さい場合は、RAMDirectoryを使用することをおすすめします。そうでなければ、標準FSDirectory(ファイルベース)が問題ありません。

Luceneでは、Contrib.Shingles package(最新のビルドに含まれているかもしれませんが、わかりません)を使用します。これは、文字で項目をトークン化するnグラムのフィルタですので、基本的に最初の数文字(検索条件)を検索して結果を得ることができます。

あなたが取る方法にかかわらず、入力される入力の速度を考慮する必要があります。キーが押されるたびにルックアップを実行すると、適用される。

一般に、検索条件が2文字を超えてから検索を開始したい場合があります。さらに、行われた要求の数を追跡します。要求が戻ってきて新しい入力が送信された場合、古い要求を取り消して新しい要求を送信すると、古い要求の値は使用されません。

UIコンポーネントに関しては、別のコンポーネントベンダーにこれを処理させる方が良いでしょう。 WinFormsにはTextBoxのオートコンプリートメカニズムがあり、SilverlightにはSilverlight Toolkitのオートコンプリートがあり、jQueryにはWebページのオートコンプリートメカニズムがあります。これらのうちの1つを使用し、上記のガイドラインを使用してデータをシャッフルしてください。

0

WinForms TextBoxについて説明している場合は、TextBoxのAutomCompleteModeプロパティとAutoCompleteCustomSourceプロパティを参照してください。