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

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

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

Re[3]: スクロールバーの移動について


(過去ログ 39 を表示中)

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

■20601 / inTopicNo.1)  スクロールバーの移動について
  
□投稿者/ よしのり (1回)-(2008/06/12(Thu) 18:38:49)

分類:[VB.NET/VB2005] 

開発環境:Microsoft Visual Basic 2005(VB.NET)

【質問】
垂直スクロールバーの移動をマウスホイールの操作にて可能したいのですが、どなたか実現方法をご教授下さい。

【状況説明】
・VscrollBarオブジェクトにより、1つ垂直スクロールバーを設ける。
・PictureBoxオブジェクトにより、1つピクチャーボックスを設ける。
 (このピクチャーボックスに折れ線の描画を行う。)
・垂直スクロールバーとピクチャーボックスを連動させる。
 (垂直スクロールバーのイベントより座標を求め、その取得した座標を元にピクチャーボックスの上下移動を可能とする。)

【案1】 ※下名の考えた案です
・ピクチャーボックスにフォーカスが当たった場合→垂直スクロールバーをアクティブにする。
 (アクティブにすると、マウスホイールの操作にて移動可能となる。)
 但し、問題が1点が発生します。
 →垂直スクロールバーがチカチカした状態となる。グレー、濃いグレーの色が交互に表示される形となる
  
 この問題点を解消する方法が分かればなんとかいけるのですが。。。








引用返信 編集キー/
■20605 / inTopicNo.2)  Re[1]: スクロールバーの移動について
□投稿者/ 渋木宏明(ひどり) (782回)-(2008/06/12(Thu) 19:43:41)
渋木宏明(ひどり) さんの Web サイト
> 【状況説明】
> ・VscrollBarオブジェクトにより、1つ垂直スクロールバーを設ける。
> ・PictureBoxオブジェクトにより、1つピクチャーボックスを設ける。
>  (このピクチャーボックスに折れ線の描画を行う。)
> ・垂直スクロールバーとピクチャーボックスを連動させる。
>  (垂直スクロールバーのイベントより座標を求め、その取得した座標を元にピクチャーボックスの上下移動を可能とする。)

まず、↑の手法が適切ではないように思います。

PibtureBox を自力で上下しているってことは、何画面にもなるような巨大な描画範囲を想定してないんですよね?
(描画範囲が何画面にも渡るような巨大なものになる場合、↑の方法だと破たんするように思います)

であれば

・Panel の上 (0,0) に PictureBox を貼る
・Panel の AutoScroll プロパティを True に設定する

で、PictureBox の Size プロパティを設定すれば、自前で ScrollBar を配置しなくてもスクロール可能となります。

また、例によってですが、このシナリオなら PictureBox に直接描画するのではなく、必要なサイズの Bitmap を作成して、PictureBox の Image プロパティに設定する方がよいと思います。

その上で、ホイール操作による「自然なスクロール」を実現したいなら、Panel でホイール操作のイベントを捕捉して、Panel.SetDisplayRectLocation() メソッドなどを使って表示位置を調整すればいいんじゃないでしょうか。

引用返信 編集キー/
■20663 / inTopicNo.3)  Re[2]: スクロールバーの移動について
□投稿者/ よしのり (2回)-(2008/06/13(Fri) 15:37:10)
No20605 (渋木宏明(ひどり) さん) に返信
>>【状況説明】
>>・VscrollBarオブジェクトにより、1つ垂直スクロールバーを設ける。
>>・PictureBoxオブジェクトにより、1つピクチャーボックスを設ける。
>> (このピクチャーボックスに折れ線の描画を行う。)
>>・垂直スクロールバーとピクチャーボックスを連動させる。
>> (垂直スクロールバーのイベントより座標を求め、その取得した座標を元にピクチャーボックスの上下移動を可能とする。)
>
> まず、↑の手法が適切ではないように思います。
>
> PibtureBox を自力で上下しているってことは、何画面にもなるような巨大な描画範囲を想定してないんですよね?
> (描画範囲が何画面にも渡るような巨大なものになる場合、↑の方法だと破たんするように思います)
>
> であれば
>
> ・Panel の上 (0,0) に PictureBox を貼る
> ・Panel の AutoScroll プロパティを True に設定する
>
> で、PictureBox の Size プロパティを設定すれば、自前で ScrollBar を配置しなくてもスクロール可能となります。
>
> また、例によってですが、このシナリオなら PictureBox に直接描画するのではなく、必要なサイズの Bitmap を作成して、PictureBox の Image プロパティに設定する方がよいと思います。
>
> その上で、ホイール操作による「自然なスクロール」を実現したいなら、Panel でホイール操作のイベントを捕捉して、Panel.SetDisplayRectLocation() メソッドなどを使って表示位置を調整すればいいんじゃないでしょうか。



返信ありがとうございます。
現状の状態の処理をそのまま残して、実現させたいのですが、その場合は実現は不可でしょうか?
独立したVscrollBarオブジェクトにて実現させたいのですが。。。不細工な処理なのかもですが。。。




引用返信 編集キー/
■20667 / inTopicNo.4)  Re[3]: スクロールバーの移動について
□投稿者/ y4yama (74回)-(2008/06/13(Fri) 16:07:56)
ちょっと興味を持って、試してみました

>・ピクチャーボックスにフォーカスが当たった場合→垂直スクロールバーをアクティブにする。
> (アクティブにすると、マウスホイールの操作にて移動可能となる。)
を変更して、
PictureBox1_Click()イベントにて、Me.PictureBox1.Focus()とします。するとマウスホイールの操作にて
PictureBox1_MouseWheel()イベントが発生するので、VScrollBar1.Value = e.Delta / 10 などと
してやれば、ちかちかしませんよ

思惑と異なってたら、すみません
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -