Public Class Form1 ' 引数で受け取った Graphics クラスを使って、現在時刻を描く処理 Private Sub DrawTime(g As Graphics) g.DrawString(Now.ToString("HH:mm:ss.fff"), Me.Font, Brushes.Red, Point.Empty) End Sub ' Bitmap インスタンスから得た Graphics インスタンスに描画させる Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' 確実に Dispose を呼び出せるように、Using ステートメントを利用している Using bmp As New Bitmap(100, 100) Using g As Graphics = Graphics.FromImage(bmp) DrawTime(g) End Using ' 描画した Bitmap を sample.png というファイル名で保存する。 bmp.Save("C:\TEMP\sample.png", Imaging.ImageFormat.Png) End Using End Sub ' PictureBox1 では、CreateGraphics() を使っているので、フォームの最小化等で消えてしまう。 ' PictureBox2 では、前景に割り当てた Bitmap に描いているので、最小化しても残り続ける。 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Using g As Graphics = PictureBox1.CreateGraphics() g.Clear(Color.Yellow) DrawTime(g) End Using If PictureBox2.Image IsNot Nothing Then PictureBox2.Image.Dispose() '古い画像が割り当てられていたら捨てる End If PictureBox2.Image = New Bitmap(100, 100) '新しいキャンバスを用意 Using g As Graphics = Graphics.FromImage(PictureBox2.Image) g.Clear(Color.Yellow) DrawTime(g) End Using End Sub 'Form1 の Paint イベントで得られる e.Graphics に対して描画させる Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint DrawTime(e.Graphics) End Sub ' 0.1 秒ごとに、Form1 に再描画を指示する Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load DoubleBuffered = True Timer1.Interval = 100 Timer1.Start() End Sub Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick Invalidate() End Sub End Class