プロが教えるわが家の防犯対策術!

非.NETユーザーだったのですが、.NETを勉強しています。
フォーム上に描画を行いたいのですが、下のモジュールを入力して、
実行した場合○と□が描画されます。
しかし、フォームの大きさ以上の描画をした場合に、表示しきれないので
スクロールバーを表示したいと思っています。
HScrollBarをフォームに貼り付けてBottomに移動した後、
実行した所、描画は行われるのですがスクロールバーが効きません。
なんらかのプロパティを変更しなければならないのでしょうか。
それとも、この場合根本的にHScrollBarコントロールを使用できないの
でしょうか。

Private Sub cmd描画_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmd描画.Click
Dim g As Graphics
Dim p As Pen
Dim b As SolidBrush
Dim r1, r2, r3 As Rectangle
g = Me.CreateGraphics
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)
End Sub

よろしくお願い申し上げます。

A 回答 (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
    • good
    • 0
この回答へのお礼

ご回答有難うございます。お手間かけてすみません。
思い通りのスクロールが出来ました。
こちらを利用してみます。有難うございました^-^

お礼日時:2006/08/09 09:12

HScrollBarのScrollイベントにはどういうコードを書いているんですか?

この回答への補足

ご回答有難うございます。

>HScrollBarのScrollイベントにはどういうコードを書いているんですか?
あぁ…コードは全く書いていません。
書かなくても動作すると思い込みでした…。
お手間の掛からないコードでしたら書き込み願えますか。
よろしくお願い申し上げます。

補足日時:2006/08/04 18:03
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!