投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/9/28 10:58:11
> Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox2.Paint

「PictureBox2 の Paint イベント」に対して
「PictureBox1_Paint」という名前を使うのは混乱の元なので、見直すべきかと思います。

引数定義さえ正しければ、イベント ハンドラーの名前は自由に付けられるので、
下記のように、一切関係のない名前にしても動作には影響ありませんが、
後で見た時に分かりにくいコードになってしまいますよね。

Private Sub イヨ(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
End Sub

Private Sub TextBox1_Changed(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
End Sub



> この線を書くコードを TrackBar1.Scrollしたときに呼び出したいです。

TrackBar の「Scroll イベント」もしくは「ValueChanged イベント」内から
 PictureBox1.Invalidate()
と書いてみてください。そうすればスクロール後に PictureBox1 の Paint イベントが発生します。
もちろん、
 PictureBox2.Invalidate()
ならば、PictureBox2 の Paint イベントが発生します。


また、Scroll イベントと ValueChanged イベントの使い分け方ですが、

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    TrackBar1.Value += 10
End Sub

のように、プログラムから Value を変更した場合は、TrackBar の Scroll イベントが発生しません。
一方 ValueChanged であれば、プログラムから Value を変更した場合にもマウスやキーボードでスクロールした場合にも呼び出されるという違いがあります。


> '縦線
> Dim i As Integer = TrackBar1.Value
> Do While i < 600

座標指定のコードなので、i や ii という変数名の代わりに、
x や y という変数名を用いると、後から見た時に分かりやすいかと思います。

それと、このような処理では Do~Loop ではなく For~Next を使った方がスマートかと思います。

'縦線 
For x = TrackBar1.Value To 600 - 1 Step 60
    e.Graphics.DrawLine(Pens.Gray, x, 0, x, 400)
Next

'横線 
For y = TrackBar1.Value To 399 Step 40
    e.Graphics.DrawLine(Pens.Gray, 0, y, 600, y)
Next