ボタンクリックなどのアクションのタイミングで画面に描画する (CreateGraphics を利用) - C#

ボタンクリックなどのアクションのタイミングで画面に描画するコードを紹介します。

概要

ボタンがクリックされたタイミングなどのアクション発生時に画面に描画するコードを紹介します。
この記事で紹介する方法は、CreateGraphicsを利用します。
補足
この記事で紹介するコードは、CreateGraphicsメソッドを利用しており、簡易な実装をしています。 本来は、CreateGraphicsメソッドを利用せずに、OnPaintで実装する方法が最適です。 OnPaintで実装する方法はこちらの記事を参照して下さい。

プログラム

UI

下図のフォームを作成します。ボタンとパネルを1つずつ配置します。

コード

以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CreateGraphicsDraw
{
  public partial class FormDraw : Form
  {
    public FormDraw()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      Graphics g = panel1.CreateGraphics();

      Pen p1 = new Pen(Color.Red, 2);
      g.DrawRectangle(p1,new Rectangle(64,64,256,64));

      Pen p2 = new Pen(Color.Green, 2);
      g.DrawRectangle(p2, new Rectangle(360, 24, 32, 128));

      Pen p3 = new Pen(Color.Blue, 1);
      g.DrawLine(p3, new Point(24, 200), new Point(560, 32));
    }
  }
}

解説

PanelコントロールのCreateGraphics()メソッドを呼び出し、panel1のGraphicsオブジェクトを作成します。
  Graphics g = panel1.CreateGraphics();

Graphicsオブジェクトの描画メソッドを呼び出して図形を描画します。
  Pen p1 = new Pen(Color.Red, 2);
  g.DrawRectangle(p1,new Rectangle(64,64,256,64));

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。Panelコントロールに図形が描画できました。

補足

CreateGraphics()メソッドでGraphicsオブジェクトを取得した描画した場合、画面への描画はボタンをクリックした時点で1度だけ実行されます。 そのため、画面の更新が必要になった場合に図形の再描画はされない点に注意が必要です。

ほかのウィンドウが前面に重なった場合でも、描画内容はクリアされません。


アプリケーションのウィンドウを前面にした場合でも、描画内容はそのまま保持されます。


しかし、ウィンドウをリサイズして縮小した場合、画面外になる部分の描画内容はクリアされます。


リサイズしたウィンドウを元のサイズに戻したとき、欠けてしまった部分の描画内容は復元されません。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2023-01-16
iPentec all rights reserverd.