VB2005 グラフィック操作


みや  2009-04-05 23:58:09  No: 141807  IP: 192.*.*.*

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の場合は何か別の操作が必要なのでしょうか?

編集 削除
オショウ  2009-04-06 11:00:47  No: 141808  IP: 192.*.*.*

パネルの背景に書きたいようですが・・・

とりあえず

    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

で、書けますが・・・

以上。参考まで

編集 削除
魔界の仮面弁士  2009-04-06 11:24:26  No: 141809  IP: 192.*.*.*

フォームに SplitContainer だけを貼り、みやさんのコードを
フォームの Load イベントに配置してみたところ、問題なく
左側のパネルに、赤楕円黒斜線が描画されましたよ。

編集 削除
みや  2009-04-07 00:55:26  No: 141810  IP: 192.*.*.*

魔界の仮面弁士さま  ありがとうございます。

そのとおりでした。
私も新しいプロジェクトに
  フォームに SplitContainer だけを貼り、
  上記コードをフォームの Load イベントに配置して
みたところ問題なく期待通りの動作をしました。

しかし、問題が出ているプロジェクトではいまだに動いてくれません。
なにか別の問題があるのかもしれませんが、新しく作るほうがはやそう
なので、ゼロから作り直します。

オショウ さま、ありがとうございます。

>パネルの背景に書きたいようですが・・・
実際には表示されればいいわけで、わざわざPictureオブジェクトを
追加しなくてもできるなら・・・と言うだけの理由です。

また、目的のひとつに「回転する針」を表示すること(アニメーション?)が
あるのですが、そのときもPaintイベントを使ってできるのでしょうか?

# Me.Refresh()を入れているのも繰り返し表示の準備のつもりなのですが
#RefreshすればPaintがCallされるので結局は同じということでしょうか?

編集 削除