- 題名: ドラッグでスクロール
- 日時: 2004/08/06 18:08:42
- ID: 5432
- この記事の返信元:
- (なし)
- この記事への返信:
- [5445] Re[1]: ドラッグでスクロール2004/08/06 22:09:37
- ツリーを表示
■No5535に返信(SIVAさんの記事)
SIVAさん、こんばんは。深山と申します。
> ドラッグ中のpictureBox1がブルブル震えるような(?)不穏な動きをします。
こちらでも確認しました。検証したところ
AutoScrollPosition プロパティを設定する
→設定された値に応じて pictureBox1 が移動させられる
→(相対的に)マウス ポインタの座標値が変わる
のが原因のようです。
ですので、マウス ポインタの座標値をスクリーン座標で持つようにしてあげれば解決しますよ。
こんな感じでどうでしょう?
# 直打ちなのでタイプ ミスがあるかも知れません(^_^;)
> private Point pnt;
> private bool bFlag;
>
> private void pictureBox1_MouseDown(...省略...) {
> pnt = new Point(e.X, e.Y);
pnt = pictureBox1.PointToScreen(pnt);
> bFlag = true;
> }
>
> private void pictureBox1_MouseUp(...省略...) {
> bFlag = false;
> }
>
> private void pictureBox1_MouseMove(...省略...) {
> if(bFlag) {
Point pnt2 = new Point(e.X, e.Y);
pnt2 = pictureBox1.PointToScreen(pnt2);
int x = pnt2.X - pnt.X;
int y = pnt2.Y - pnt.Y;
> panel1.AutoScrollPosition = new Point(x * -1, y * -1);
> }
> }
ただ、これだとスクロール バーの操作と組み合わせた時に意図した動作にならないのでは
ないでしょうか?
もしそうでしたら、 AutoScrollPosition プロパティを変更するときに現在の値とマウスの
移動分から新しい値を計算するようにする必要があります。
分類:[.NET]
初めて投稿します。
まだ初心者ですがよろしくお願い致します。
AutoScroll付きのPanel(panel1とします)の上に
PictureBox(pictureBox1とします)を配置し、
そこにGraphicsで線などを描画しています。
他のコントロールよりpictureBox1のサイズを変更でき、
panel1より大きくなるとスクロールバーが表示されます。
現在スクロールバーを操作する事により
pictureBox1の隠れた部分を表示(スクロールさせる事)はできるのですが、
pictureBox1をドラッグしてマウスを移動させる事で
同様の処理を行えないでしょうか?