2008年09月20日
川俣晶の縁側ソフトウェア技術雑記total 10097 count

.NET FrameworkのSystem.Windows.Forms.ScrollBar.Valueプロパティの値はマウス操作ではMaximum-LargeChange+1までしか行かない

Written By: 川俣 晶連絡先

 Windowsフォームアプリのスクロールバーの挙動が理解できずに苦しんで、それでも調査を突き詰めたら困ったことが判明。

概要 §

 .NET FrameworkのSystem.Windows.Forms.ScrollBar.Valueプロパティの値は、ドキュメントには「Minimum と Maximum の範囲内の数値」と記載されていて、確かにMaximumの値までは代入できます。

 ところが、マウスでスクロールバーを操作すると、実際にはMaximum-LargeChange+1までの値にしか行きません。それ以上、いくらボタンをクリックしても値はそれ以上に増えません。

 この挙動は、なぜかValueプロパティのドキュメントには書かれておらず、Maximum プロパティの説明に書かれています。

最大値にはプログラムによってしか到達できません。スクロール バーの値を、実行時にユーザーとのやり取りを通じて最大値にすることはできません。ユーザーとの対話型操作によって到達できる最大値は、1 に Maximum プロパティ値を加えてから LargeChange プロパティ値を引いた値と同じです。必要に応じて、Maximum プロパティには、前の項 1 を考慮して、オブジェクトのサイズよりも 1 小さい値を設定できます。

検証プログラム §

 Visual Studio 2008 SP1+.NET Framework 3.5+Windows Vista Business。

 C#のWindowsフォームアプリのプロジェクトを作成。フォーム上にLabelとvScrollBarを貼り付け。フォームのLoadと、vScrollBarのValueChangedイベントを作成後、以下のコードを入力。

private void vScrollBar1_ValueChanged(object sender, EventArgs e)

{

    label1.Text = this.vScrollBar1.Value.ToString();

}

private void Form1_Load(object sender, EventArgs e)

{

    this.vScrollBar1.LargeChange = 100;

    this.vScrollBar1.Maximum = 1000;

    this.vScrollBar1.SmallChange = 1;

    this.vScrollBar1.Value = 1000;

}

 実行直後は確かにLabelに1000という値が表示されるが、スクロールバーをマウスでクリックした瞬間に901となり、マウス操作ではそれ以上大きな値に変化させることができない。

感想 §

 直感的に分かりにくいにも関わらず、これは割と使いやすい仕様だったりします。Valueプロパティに移動不可能な値が代入できてしまう問題を除けば。

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2008年
09月
30日
特定バージョンのMinGWのgccでcp932のソースがコンパイルできない
3days 0 count
total 9694 count
【技術雑記】の前のコンテンツ
2008年
08月
26日
ACID Pro 4.0を今時アクティベーションする方法
3days 0 count
total 6744 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20080920015329
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.