到達不能System.Windows.Forms.ScrollBar.Maximum

今日、私はかなり奇妙なことに出会いました。 Windows.Forms.ScrollBarを使用する場合、ユーザーは最大値に到達できません。 マウスもキーボードもスライダーを「最大」に設定できません。

たとえば、フォームにhScrollBar(ScrollBarの子孫)があるとします。

その特性:
hScrollBar1.Minimum = 0、

hScrollBar1.Maximum = 100。
このシナリオでは、ユーザーは91を超えるhScrollBar1.Valueの値を取得できません(最大100)。

System.Windows.Forms.ScrollBar



最初は.Net 4.0ベータ版で、次にWindows 7 RCで罪を犯しました。 この要素の振る舞いは私の心には収まりませんでした。 友人に以前のバージョンをチェックするように頼んで、私は誰もがこれを見ると確信していました...



MSDNScrollBarクラスを見つけましたが 、そこで確認しました。
最高値はプログラムでのみ設定できます。 スクロールバーのこの最高値は、実行時にユーザーが設定することはできません。 ユーザーが設定できる最大値は、式:1 + Maximumプロパティの値-LargeChangeプロパティの値によって決まります。 必要に応じて、この式の値が1になるように、Maximumプロパティをオブジェクトサイズ-1に設定できます。
実際、hScrollBar1.LargeChange = 1でチェックしましたが、最大値に達しましたが、ページスクロールは通常のスクロールと変わりません(アクションごとに±1)。



理由の正確な説明は見つかりませんでした。 しかし、この効果はScrollBarの性質によって説明されると言う人もいます-現在の値は、スライダーの左(上)境界の位置を反映しています:

System.Windows.Forms.ScrollBar

次に、LargeChangeプロパティを小さくすると、スライダーのサイズは同じままですが、最大値に達するのはなぜですか?

結局のところ、たとえば、青いマーカーの間の領域にスライダーの中心の位置を反映することができました。

System.Windows.Forms.ScrollBar



一般に、これは要素の非常に奇妙な振る舞いであり、これを知りたいと思う人もいると思いました。 誰かがこれを説明することさえできますか? =)



PS WPFでは、ScrollBarはデフォルトで0から1まで正直に実行されます



UPD:そして、「ページ」の概念に基づいた説明がここにあります-mrShadowコメントですべてを説明しました:
Kagbe、スライダーのサイズは表示領域(ページ)のサイズに対応し、スクロールバーの長さは表示可能な領域全体のサイズに対応します。 スライダーがストリップの一番左の部分にある場合、その位置は0であり、表示領域では0から{ページサイズ}の領域です。 したがって、スライダーの位置{最大値はスライダーのサイズ}は、{full length-page size}から{full length}までの右端の領域に対応します。 スライダー位置{最大値}は、{長さ}から{長さ+ページサイズ}までの(存在しない)領域に対応します。



All Articles