タイマーでDashPatternを変更しています。
namespace BlinkLine2;
using System.Drawing.Drawing2D;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 点滅フラグ
bool blinkFlag = false;
this.ClientSize = new Size(400, 400);
// ペンを生成
Pen pen1 = new (Brushes.Black, 2.0f)
{
DashStyle = DashStyle.Custom,
};
float[] dashPattern1 = new float[] {2.0F, 2.0F, 3.0F, 1.0F};
float[] dashPattern2 = new float[] {3.0F, 1.0F, 2.0F, 2.0F};
// グラフィックパスを生成
GraphicsPath path1 = new();
// 四角形を追加
path1.AddRectangle(new Rectangle(50, 50, 300, 300));
// タイマーオブジェクトの生成と初期化
if (this.components == null) return;
var timer = new System.Windows.Forms.Timer(this.components)
{
Interval = 200,
};
// ピクチャボックスの生成と登録
var picbox = new PictureBox
{
Size = this.ClientSize,
};
this.Controls.Add(picbox);
// ロードイベントでタイマースタート
this.Load += (s, e) => timer.Start();
// タイマーイベント・ピクチャボックス再描画
timer.Tick += (s, e) => picbox.Invalidate();
// ピクチャボックスのペイントイベント
picbox.Paint += (s, e) =>
{
// クリア
e.Graphics.Clear(picbox.BackColor);
// パスを描画
if (pen1.DashStyle == DashStyle.Custom)
{
// 点滅フラグを反転
blinkFlag = !blinkFlag;
pen1.DashPattern = blinkFlag ? dashPattern1 : dashPattern2;
}
e.Graphics.DrawPath(pen1, path1);
};
// クローズイベントでタイマー終了
this.Closed += (s, e) => timer.Stop();
}
}
コメント