VB2005、WindowsXPでグラフィック初挑戦です。
With Me.SplitContainer1.Panel1
.BackColor = Color.White
Dim b As New Bitmap(.ClientSize.Width, .ClientSize.Height)
MsgBox(.ClientSize.Width & " " & .ClientSize.Height)
Dim g As Graphics = Graphics.FromImage(b)
g.DrawEllipse(Pens.Red, 10, 10, 50, 80)
g.DrawLine(Pens.Black, 0, 0, 100, 200)
.BackgroundImage = b
.BackgroundImageLayout = ImageLayout.None
g.Dispose()
Me.Refresh()
End With
上記のコードで
.BackColor = Color.White
の部分は変化するので期待通りの動作をしていることが確認できています。
MsgBoxの表示は「223 192」なのでPanelの大きさも問題ないと思います。
しかしDrawEllipse、DrawLine の結果であるはずの赤い楕円形と黒い斜線
は現れません。
上記の1行目を
With Me
とすればフォームの背景が白色になり、左上の隅に楕円形と斜線が表示されます。
Panelの場合は何か別の操作が必要なのでしょうか?
パネルの背景に書きたいようですが・・・
とりあえず
Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
Using g As Graphics = e.Graphics
g.Clear(Color.White)
g.DrawEllipse(Pens.Red, 10, 10, 50, 80)
g.DrawLine(Pens.Black, 0, 0, 100, 200)
End Using
End Sub
で、書けますが・・・
以上。参考まで
フォームに SplitContainer だけを貼り、みやさんのコードを
フォームの Load イベントに配置してみたところ、問題なく
左側のパネルに、赤楕円黒斜線が描画されましたよ。
魔界の仮面弁士さま ありがとうございます。
そのとおりでした。
私も新しいプロジェクトに
フォームに SplitContainer だけを貼り、
上記コードをフォームの Load イベントに配置して
みたところ問題なく期待通りの動作をしました。
しかし、問題が出ているプロジェクトではいまだに動いてくれません。
なにか別の問題があるのかもしれませんが、新しく作るほうがはやそう
なので、ゼロから作り直します。
オショウ さま、ありがとうございます。
>パネルの背景に書きたいようですが・・・
実際には表示されればいいわけで、わざわざPictureオブジェクトを
追加しなくてもできるなら・・・と言うだけの理由です。
また、目的のひとつに「回転する針」を表示すること(アニメーション?)が
あるのですが、そのときもPaintイベントを使ってできるのでしょうか?
# Me.Refresh()を入れているのも繰り返し表示の準備のつもりなのですが
#RefreshすればPaintがCallされるので結局は同じということでしょうか?
ツイート | ![]() |