- ベストアンサー
フォームに描画して表示をスクロールしたい
- 非.NETユーザーが.NETを勉強中です。フォーム上に描画を行いたいが、表示しきれない場合にスクロールバーを表示したいです。
- HScrollBarを使用して描画を行うが、スクロールバーが効かない問題が発生しています。
- 根本的にHScrollBarコントロールを使用できないのか、プロパティの変更が必要なのか、どうすればスクロールバーを表示できるのか分かりません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
補足があったことに今気がつきました(笑) 遅くなりましたが。 通常はスクロールイベントから移動量を取得し、移動させたいオブジェクトの座標からその移動量を引く…といった書き方でいいと思います。 ただ、移動したいオブジェクトが複数ある場合は、ひとつひとつ移動処理を書くのが面倒なので通常PictureBoxなどを使います。 下記例では、Form上にcmd描画ボタン、PictureBox1、HScrollBar1があり、PictureBox1の中にPictureBox2があるものとします。またPictureBox2はデフォルトで.visible=falseにしています。 なお、PictureBox2は、描写したいオブジェが全て収まるよう、あらかじめ大きなサイズにしておいてください。 Private Sub cmd描画_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmd描画.Click 'はじめから図形が描画されていてもいい場合は、わざわざこんな処理は要りません。 PictureBox2.Visible = True End Sub Private Sub PictureBox2_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox2.Paint 'Paintイベントに描画処理を書くことで、Formが最小化されたり画面外に出た場合でも、描画したものが消えたりしません。 Dim g As Graphics = e.Graphics Dim p As Pen Dim b As SolidBrush Dim r1, r2, r3 As Rectangle p = New Pen(Color.Red) b = New SolidBrush(Color.Blue) r1 = New Rectangle(10, 10, 50, 50) g.DrawEllipse(p, r1) r2 = New Rectangle(70, 70, 50, 50) g.FillRectangle(b, r2) r3 = New Rectangle(500, 10, 50, 50) g.DrawEllipse(p, r3) p.Dispose() b.Dispose() End Sub Private Sub HScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HScrollBar1.Scroll 'スクロールした分、PictureBox2を左に動かします。 PictureBox2.Left = -e.NewValue End Sub
その他の回答 (1)
- NYOI
- ベストアンサー率58% (56/96)
HScrollBarのScrollイベントにはどういうコードを書いているんですか?
補足
ご回答有難うございます。 >HScrollBarのScrollイベントにはどういうコードを書いているんですか? あぁ…コードは全く書いていません。 書かなくても動作すると思い込みでした…。 お手間の掛からないコードでしたら書き込み願えますか。 よろしくお願い申し上げます。
お礼
ご回答有難うございます。お手間かけてすみません。 思い通りのスクロールが出来ました。 こちらを利用してみます。有難うございました^-^