Шаблон статической отрисовки
1. Открываем Visual Stduio
2. Создаем Windows Forms App (C#)

3. В конструкторе подписываемся на событие Paint
public Form1()
{
InitializeComponent();
Paint += Form1_Paint;
}
4. В хендлере события Paint можем воспользоваться объектом e.Graphics для рисования примитивов
private void Form1_Paint(object? sender, PaintEventArgs e)
{
// используем e.Graphics
}
Опции конструктора
1. Задать размер окна в конструкторе
ClientSize = new Size(400, 400);2. Включить двойную буферизацию (чтобы не видеть промежуточные фазы процесса отрисовки)
DoubleBuffered = true;3. Выводить окно по центру при старте программы
StartPosition = FormStartPosition.CenterScreen;4. Подписаться на хендел изменения размеров окна
SizeChanged += Form1_SizeChanged;После конструктора нужно создать хендлер
private void Form1_SizeChanged(object? sender, EventArgs e)
{
Invalidate();
}
Это позволит перерисовывать (вызывать событие Paint) окно если пользователь изменил его размер (например развернул на весь экран "максимизировал")
Опции хендлера Paint
1. Создать переменную с коротким названием чтобы не писать каждый раз e.Graphics целиком
var gr = e.Graphics;2. Включить сглаживание графики перед отрисовкой
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
// либо можно написать коротко не указывая весь namespace
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
// но тогда надо наверху файла в формы написать
using System.Drawing.Drawing2D;