2011-07-26 12 views
2

私は、WinFormコンボボックスを拡張することでオートコンプリートを実装しました。私が今やりたいのは、入力時のドロップダウンの高さを減らすことです。ComboBoxのDropDownHeightを減らすにはどうすればよいですか?

私のようなものを試してみた:KeyUpイベントハンドラの最後で

this.DropDownHeight = this.ItemHeight * this.Items.Count 

が、結果は非常に奇妙です。

この小さな問題をどうやって解決できますか?

+0

高さ低減の基準は何ですか? – V4Vendetta

+0

それは表示された項目の数に高さを減らすことでした – jGong

+0

コーディーはそのことについて大きな洞察力を与えている..同じのために投票しました – V4Vendetta

答えて

4

DropDownHeightプロパティは、ドロップダウン時のコンボボックスの高さを制御します。

(はい、あなたが言う、それだけ!明らかである)しかし、それは、ないオートコンプリートの提案のリストと同じものです。

(彼らは同じように見える;?!彼らは両方のアイテムのリストをドロップダウンしている)

はい、彼らはあります。しかし、彼らは舞台裏で全く異なった実装をしています。ドロップダウンコンボボックスは、ドロップダウン部分が画面上に永続的に表示される「フル」コンボボックス(WinFormsでは「スタイル」は「シンプル」と呼ばれます)と同じです。唯一の違いは、 "DropDown"または "DropDownList"スタイルでは、ドロップダウン部分が隠され、ユーザーが要求したときにのみ表示されることです。 (A comparison of various combo box styles)。このスタイルの本来の意図はスクリーンスペースを節約することでしたが、スクリーンスペースがもはや懸念事項ではなくなっても、誰もが代わりに使用するようになりました。

つまり、ドロップダウンアイテムリストは、に変更されません。 Windowsは自動補完候補を表示するために同じドロップダウンリストを再利用しません。これは、必要に応じて作成され、破壊される全く異なるポップアップウィンドウです。これは、自動完成提案リストがのサイズ変更可能なであるということです。それはそこにそれらの1つを角にグリッパをサイズ変更します。通常のドロップダウンリストにはこれが含まれていないので、同じドロップダウンリストには表示されません。技術的には、オートコンプリート提案リストはシェルIAutoCompleteInterfaceによって実装され、すべての編集コントロールで使用されるのと同じものです。 (もう死んでギブアウェイがthis oneのようなバグで発見された。)

だから実際は、オートコンプリート候補リストのドロップダウンの高さを変更する必要があります!しかし、残念なことに、WinFormsはそうするためのプロパティを公開しません。

したがって、おそらくは、最初にとするべきではないと結論づけるのが合理的です。ユーザーが選択したとおりに自動補完候補ボックスのサイズを変更できるようにします。これはリサイズグリッパーのためのものです。選択した最後のサイズは記憶され、再利用されます。あなたのデザイン部門が何か "より良い"ことができると思っているときでも、常にユーザーを尊重してください。

もちろん、これはWindowsなので、手を汚しても問題を解決する方法があります。自動補完候補リストは依然としてウィンドウであるため、まだウィンドウハンドルがあり、Windowsではハンドルを取得できるほとんどすべてのウィンドウを操作できます。私はこれを行うことを必ずしも示唆しているわけではありませんので、私はあなたに解決策をハックアップするためにon your ownを残します。このような機能が露光されていない場合は、通常、理由のために露光されていないことに注意してください。あなたのハッキングは、シェルチームが自動補完機能を再利用するWindowsの将来のバージョンで壊れる可能性があります。サポートの手間はほとんどかかりません。

+0

あなたの答えのおかげでたくさん – jGong

関連する問題