VB2005 コード記述作法
VBのコード記述作法に自身がなく不安です。
CADのラバーラインのような感じです。
PictureBoxを置いてFormの上下左右にアンカーしてるだけです。
lineモードにXorがないので下記のようにしました。
今は、とりあえず動いてますが、<?>印部分をここに記述しても安定動作しますか?
(メモリの無駄使いとか・CPUの負荷とか)
又Form1_Resizeで再描画してますが、Windowを最小化すると当然でしょうが
PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
でエラーになります。
これを防ぐ方法を教えて下さい。
Public Class Form1
Private sx, sy, ex, ey As Integer
Private flg As Boolean = False
Private fg, bg As Graphics '----<?>----
Private d(100, 4) As Integer
Private po As Integer = 1
'--------------------------------
Private Sub PictureBox1_MouseDown(~~
If flg = False Then
sx = e.X
sy = e.Y
ex = sx
ey = sy
flg = True
fg = PictureBox1.CreateGraphics() '----<?>----
Else
flg = False
ex = e.X
ey = e.Y
PictureBox1.Refresh()
fg.Dispose() '----<?>----
bg = Graphics.FromImage(PictureBox1.Image) '----<?>----
bg.DrawLine(Pens.Black, sx, sy, ex, ey)
bg.Dispose() '----<?>----
PictureBox1.Refresh()
d(po, 1) = sx
d(po, 2) = sy
d(po, 3) = ex
d(po, 4) = ey
po = po + 1
End If
End Sub
'--------------------------------
Private Sub PictureBox1_MouseMove(~~
If flg = True Then
PictureBox1.Refresh()
fg.DrawLine(Pens.Blue, sx, sy, e.X, e.Y)
ex = e.X
ey = e.Y
End If
End Sub
'--------------------------------
Private Sub Form1_Resize(~~
Dim x As Integer
PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
bg = Graphics.FromImage(PictureBox1.Image) ' ----<?>----
For x = 1 To po - 1
bg.DrawLine(Pens.Black, d(x, 1), d(x, 2), d(x, 3), d(x, 4))
Next
bg.Dispose() ' ----<?>----
End Sub
'--------------------------------
End Class
お礼
ありがとうございました。やはり、e.Graphics…とBitMapの混在は無理ですよね。思い通りになりました。でも、vb6のlineにせよpsetにせよ図形処理は簡単で良かったとつくづく思います。