2011-03-04 16 views
3

私は、コントロールの幅に合わせて横にサイズを変更するアイテム(子コントロール)のリストを含むカスタムコントロールを作成しています。アイテムがたくさんある場合(またはコントロールのサイズが垂直方向に十分に大きくならないようにサイズが変更されている場合)、垂直スクロールバーが必要です。垂直スクロールバーが表示されると、子コントロールが突然大きくなり、水平スクロールバーが表示されます。WinForms:AutoScrollで水平スクロールバーを避けるには?

コントロールの配置を手動で制御している場合(AnchorStylesに依存しない)、水平スクロールバーが表示されないことを保証する適切な方法は何ですか? (注:私はCompact Framework上にあるので手動でVScrollプロパティを制御することはできません。アイテムの最小幅がクライアント領域より広い場合は、水平スクロールバーが正当に必要です)

答えて

2

毎回の後、私はスクロールバーが表示されていたかどうか検出されたリストに項目を追加しました。私の幅を手動で調整していない。私は、スクロールバーが表示されたかどうかを検出するためにやった

た次のいずれかWS_VSCROLLため

  1. テストはGetWindowLong()を経由してP /呼び出しを介して制御にセットしました。
  2. コントロールの子で垂直スクロールバーコントロールをスキャンします。

コントロールがスクロールバーをどのように扱うかは、どちらが正しいかによって異なります。

これはWindows上であって、CFではないので、これがまったく同じように動作するかどうかはわかりません。

+0

私がやりたかったこと(iPhoneのようなFlickList)では、スクロールがCompact Frameworkで非常に遅いので、私はもはや答えが必要ではないことが分かりました。代わりに、十分なパフォーマンスを得るためにコントロールを自分で描く必要があります。私は、スクロールバーが現れる時間はどの瞬間ですか?スクロールバーが表示された直後に発生するイベントを処理して、その存在を正しく検出する必要があります。別の問題:スクロールバーが表示されるのを待つのは、コントロールが2度再描画されるため "フリッカー"が発生しますが、これは私にとっては問題ありません。 – Qwertie

+1

私はこの回答を受け入れるかもしれません。 – Qwertie

2

幅口座に垂直スクロールバーあなたの子コントロールのために必要な幅を計算する:私は似たような状況でやった

System.Windows.Forms.SystemInformation.VerticalScrollBarWidth 
+1

まだ、スクロールバーがない場合は、実際には考慮したくありません。垂直スクロールバーの必要性は、子コントロールのレイアウトが計算された後、またはResizeイベントが作成された後でしか検出できません。 – Qwertie

関連する問題