C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: スクロールバーの可動量の取得


(過去ログ 73 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■42614 / inTopicNo.1)  スクロールバーの可動量の取得
  
□投稿者/ める (22回)-(2009/10/19(Mon) 13:23:53)

分類:[C#] 

お世話になります。
あるユーザコントロールのスクロールを行うのに、
ボタンも使えるよう考えているのですが・・・
スクロールは垂直のみです。

最初に、VerticalScrollのMaximum、Minimumプロパティで
取得出来る値の差を等分して[▼][▲]ボタンそれぞれの
移動量を求めて、各ボタンが押下された場合にValueプロパティに
±しているのですが、画面はスクロールするのにスクロールバーは
移動していないと言った事象が発生しました。
よくよく調べてみると垂直スクロールバーが一番上にある時の
Valueプロパティの値は0で、一番下にある時はValueが100でした。

スクロールバーの可動量ってどのように求めれば良いのでしょうか?
宜しくお願い致します。

環境はVisualStudio2005/C#/.net2.0です。
引用返信 編集キー/
■42626 / inTopicNo.2)  Re[1]: スクロールバーの可動量の取得
□投稿者/ bt (13回)-(2009/10/19(Mon) 15:05:18)
No42614 (める さん) に返信

> スクロールバーの可動量ってどのように求めれば良いのでしょうか?
> 宜しくお願い致します。

Maximum に LargeChange を加える必要があります。
私も以前にはまりました。

引用返信 編集キー/
■42629 / inTopicNo.3)  Re[2]: スクロールバーの可動量の取得
□投稿者/ める (23回)-(2009/10/19(Mon) 17:39:32)
No42626 (bt さん) に返信
> Maximum に LargeChange を加える必要があります。
> 私も以前にはまりました。

(あれ。書き込みしたのが消えてしまった・・・・)

レスありがとうございます。
イマイチよくわかっていません。
maximumに加えるのですか?

現在こんなソース書いてます。
-------------------------------
/// <summary>
/// ▼ボタン押下時処理
/// </summary>
private void listScrollDownButton_Click(object sender, EventArgs e)
{
    // スクロールバーの最大値と最小値から可動量算出する。
    // 可動量の1/10を1クリックの移動量とする。
    int movVal = (this.HogeUserControl.VerticalScroll.Maximum -
                   this.HogeUserControl.VerticalScroll.Minimum) / 10;

    // 現在のスクロールバーの位置
    int nowValue = this.HogeUserControl.VerticalScroll.Value;

    if (this.HogeUserControl.VerticalScroll.Maximum < nowValue + movVal)
    {
        this.HogeUserControl.VerticalScroll.Value =
            this.HogeUserControl.VerticalScroll.Maximum;
    }
    else
    {
        this.HogeUserControl.VerticalScroll.Value += movVal;
    }
}
-------------------------------
ボタンを押すと画面はスクロールはするのですが、
スクロールバーが動きません。
ボタンをもう一度押すと、画面とスクロールバーが
同時に動きます。

教えて頂いた、LargeChangeをどこで使用すれば
良いのかが良くわかりません・・・

引用返信 編集キー/
■42632 / inTopicNo.4)  Re[3]: スクロールバーの可動量の取得
□投稿者/ bt (14回)-(2009/10/19(Mon) 17:51:00)
No42629 (める さん) に返信

this.HogeUserControl.VerticalScroll.Maximum はデフォルトでしょうか?
であれば、InitializeComponent(); の後ろで

this.HogeUserControl.VerticalScroll.Maximum += this.HogeUserControl.VerticalScroll.LargeChange;

と記述してみてください。
あるいは、Maximum をどこかで求めているのであればその直後です。
+= と言う記述が気持ち悪い場合は長くなりますが

this.HogeUserControl.VerticalScroll.Maximum = this.HogeUserControl.VerticalScroll.Maximum + this.HogeUserControl.VerticalScroll.LargeChange;

みたいに書くといいです。

引用返信 編集キー/
■42633 / inTopicNo.5)  Re[4]: スクロールバーの可動量の取得
□投稿者/ める (24回)-(2009/10/19(Mon) 18:07:50)
No42632 (bt さん) に返信
> ■No42629 (める さん) に返信
>
> this.HogeUserControl.VerticalScroll.Maximum はデフォルトでしょうか?
> であれば、InitializeComponent(); の後ろで
>
> this.HogeUserControl.VerticalScroll.Maximum += this.HogeUserControl.VerticalScroll.LargeChange;
>
> と記述してみてください。

再度のレスありがとうございます。
UserControlを貼り付けている、FormのResizeイベントで、
スクロールバーの有無を判定しています。
そこで、教えて頂いた記述をしてみたのですが、

やはり1回目の押下では画面はスクロールするのですが、
スクロールバーが動かないですね・・・。
何が悪いのでしょうか?

引用返信 編集キー/
■42637 / inTopicNo.6)  Re[5]: スクロールバーの可動量の取得
□投稿者/ bt (15回)-(2009/10/19(Mon) 18:25:58)
No42633 (める さん) に返信

LargeChange と SmallChange の値はいくつでしょうか?
スクロールバーの矢印をクリックしたときのインクリメント値が SmallChange
矢印とハンドルの間の空白部分のクリックのインクリメント値が LargeChange
です。

それらの値と Maximum Minimum の兼ね合いで基本的な動作が決まります。
クリックで Value値を想定した Maximum値まで上げるには LargeChangeの値を
加算しなければならないというのがわたしが以前に同じような問題で理解した
内容です。

デバッガで止めて値を確認されたら良いと思いますが
ひょっとするとわたしがハマッたのとは違う種類の問題かもしれませんね

引用返信 編集キー/
■42645 / inTopicNo.7)  Re[6]: スクロールバーの可動量の取得
□投稿者/ める (25回)-(2009/10/19(Mon) 19:53:50)
No42637 (bt さん) に返信

> LargeChange と SmallChange の値はいくつでしょうか?

当該の画面で、スクロールバーが表示され、
最初に「▼」キーを押下した瞬間の値は、

Maximum:836
Minimum:0
LargeChange:736
SmallChange:5

でした。で、このままデバッガで追いかけたところ、

this.HogeInfoUserControl.VerticalScroll.Value += movVal;

で、Valueの値は0なのですが、+=した直後も0のままでした。
これが原因ではないかと思うのですが、なぜ+=しても0のままなのか
がわかりません。(>_<)

ちなみに、movValは83になっています。([(836-0)/10]ですので)
お手数おかけしてすみません。
引用返信 編集キー/
■42653 / inTopicNo.8)  Re[7]: スクロールバーの可動量の取得
□投稿者/ bt (16回)-(2009/10/19(Mon) 21:46:44)
No42645 (める さん) に返信

> 当該の画面で、スクロールバーが表示され、
> 最初に「▼」キーを押下した瞬間の値は、
>
> Maximum:836
> Minimum:0
> LargeChange:736
> SmallChange:5
>
> でした。で、このままデバッガで追いかけたところ、
>
> this.HogeInfoUserControl.VerticalScroll.Value += movVal;
>
> で、Valueの値は0なのですが、+=した直後も0のままでした。
> これが原因ではないかと思うのですが、なぜ+=しても0のままなのか
> がわかりません。(>_<)
>
> ちなみに、movValは83になっています。([(836-0)/10]ですので)
> お手数おかけしてすみません。


> LargeChange:736

これはおかしいですね、どのでこの値がセットされているのでしょうか?
Maximum をセットした後で LargeChange = 10 としてみてください。

引用返信 編集キー/
■42678 / inTopicNo.9)  Re[8]: スクロールバーの可動量の取得
□投稿者/ める (26回)-(2009/10/20(Tue) 09:46:42)
No42653 (bt さん) に返信
>>LargeChange:736
>
> これはおかしいですね、どのでこの値がセットされているのでしょうか?
> Maximum をセットした後で LargeChange = 10 としてみてください。

お返事遅くなりました。

-------------------------
private void HogeUserControl_Resize(object sender, EventArgs e)
{
// スクロールバーの表示/非表示によって、
// ▲▼ボタンの有効/無効をセットする
this.UpButton.Enabled = this.HogeUserControl.VerticalScroll.Visible;
this.DownButton.Enabled = this.HogeUserControl.VerticalScroll.Visible;

if (this.HogeUserControl.VerticalScroll.Visible == true)
{
    //this.HogeUserControl.VerticalScroll.LargeChange = 10;

this.HogeUserControl.VerticalScroll.Maximum +=
this.HogeUserControl.VerticalScroll.LargeChange;

this.HogeUserControl.VerticalScroll.LargeChange = 10;
}
}
-------------------------
こんな感じでセットしていますが現象は変わりません。
Maximumの値等は、UserControlが入れていますね。
Maximumの値は(多分)UserControlの高さだと思っていますが・・・

引用返信 編集キー/
■42680 / inTopicNo.10)  Re[9]: スクロールバーの可動量の取得
□投稿者/ bt (17回)-(2009/10/20(Tue) 10:17:40)
No42678 (める さん) に返信

以下は間違いです。すみません

>> LargeChange:736
>
>これはおかしいですね、どのでこの値がセットされているのでしょうか?
>Maximum をセットした後で LargeChange = 10 としてみてください。


つい先日 LargeChangeではまったものですからお役に立てばと思い投稿しましたが
初心者のわたしがでしゃばる幕ではなかったようです。

わたしの方でも LargeChangeの値など同じようなプロジェクトを作って
試してみましたが、わたしの環境では特に変な動きにはなりませんでした。

で、Value値が変化しない ↓の方が遠因のようです。混乱させてすみません

>this.HogeInfoUserControl.VerticalScroll.Value += movVal;
>
>で、Valueの値は0なのですが、+=した直後も0のままでした。
>これが原因ではないかと思うのですが、なぜ+=しても0のままなのか
>がわかりません。(>_<)

引用返信 編集キー/
■42682 / inTopicNo.11)  Re[10]: スクロールバーの可動量の取得
□投稿者/ める (27回)-(2009/10/20(Tue) 10:28:59)
いえ、レスポンスに感謝します。
2日に渡って貴重な時間を割いて頂いて
ありがとうございました。

他の方からも特にレスも付かないようなので、
一旦閉めさせて頂いて、もう少し自分で
頑張ってみようと思います。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -