2009-05-08 15 views
2

Windowsフォームリストボックスの表示高さを判断する方法はありますか?私が開発しているアプリケーションでは、リストボックスがドッキングされたフォームがあります。 ListBox.IntegralHeightがtrueに設定されているため、ListBoxが使用しない下部の余分なスペースを削除するために、フォームのサイズを自動的に変更する必要があります。現在、Form.HeightをListBox.ItemHeightで割った値を使ってフォームのサイズを変更し、余分な高さを四捨五入するためにListBox.ItemHeightでその値を掛けています。リストボックスを表示する高さ


this.Height = (this.Height/this.listBox.ItemHeight) * this.listBox.ItemHeight; 

これはVistaで素晴らしい作品が、私はXPに自分のアプリケーションを取るとき、何かがうまくいかないと、まだフォームの下部に示す余分なスペースがあります。

ListBox.PreferredHeightを使用することはできません。これは、すべてのアイテムが表示された場合にListBoxが使用する領域の量がわかります。

答えて

2

私の問題は解決されました。

ListBox.Heightは、リストボックスの表示された高さを返します。でも、ドッキングされている場合はです。それは私の質問に答えるが、私の問題の解決策ではない。

さらにデバッグすると、Vistaではフォームが正しくサイズ変更され、XPでは正しく表示されないことが明らかになりました。所有者が描画したListBoxのItemHeightは16pxです(各項目の16x16画像を描画しているため)、ListBoxはタイトルバーのない1つの枠内にあります。 Vista上のボーダーの高さは16px(アイテムの高さ)になり、XP上のボーダーの高さは8pxになります。私の高さ計算でしたが、問題はForm.ClientSizeの代わりにForm.Height(境界線を含むフォームの全体の高さ)を設定していたことです。したがって、Vistaではアイテムを失い、XPではリストボックスの下の余分なスペースは境界線が取らなかった残りの8ピクセルでした。私はもともと質問を投稿コードは、今となっています:


this.ClientSize = new Size(
    this.ClientSize.Width, 
    (this.ClientSize.Height/this.listBox.ItemHeight) * this.listBox.ItemHeight); 

これは、最寄りの項目にクライアント領域の高さを丸め、フォームの制約のサイズ変更のために良いです。私はそれを伝えるため、

System.Windows.Forms.SystemInformation.Border3DSize.Height 

は本当にこのような状況であなたを助けていることだと思い


this.ClientSize = new Size(this.ClientSize.Width, this.listBox.Height); 

0

あなたのアプリケーションによっては、レイアウト目的で適切なコンテナにリストボックスを配置するのがいいかもしれません。あなたの質問への答えではなく、ちょっとした提案です。

もちろん、上記のコンテナコードを反映させて、含まれているコントロールのサイズを知ることができます。

1

:私だけのListBoxに合うようにフォームを縮小したい場合は

、コードは次のように単純化することができあなたは国境の高さ

関連する問題