Радуга
Для начала создадим новый проект статической отрисовки
В конструкторе формы подпишемся на событие Paint
public Form1()
{
InitializeComponent();
Paint += Form1_Paint;
}
Для того чтобы вывести радугу, нарисуем 7 отдельных заполненных прямоугольников с помощью метода FillRectangle
private void Form1_Paint(object? sender, PaintEventArgs e)
{
int h = ClientSize.Height / 7;
e.Graphics.FillRectangle(Brushes.Red, 0, 0, ClientSize.Width, h);
e.Graphics.FillRectangle(Brushes.Orange, 0, h, ClientSize.Width, h);
e.Graphics.FillRectangle(Brushes.Yellow, 0, 2 * h, ClientSize.Width, h);
e.Graphics.FillRectangle(Brushes.Green, 0, 3 * h, ClientSize.Width, h);
e.Graphics.FillRectangle(Brushes.LightBlue, 0, 4 * h, ClientSize.Width, h);
e.Graphics.FillRectangle(Brushes.Blue, 0, 5 * h, ClientSize.Width, h);
e.Graphics.FillRectangle(Brushes.Violet, 0, 6 * h, ClientSize.Width, h);
}
Запустим программу и увидим следующий результат на экране:

Исходный код данного примера вы можете найти здесь
Возможные артефакты округления
Возможно вы сможете увидить у себя вот такую белую полоску после фиолетовой линии.

Это вызвано тем что размер окна может не делиться ровно на 7 частей. Поскольку мы используем целочисленный тип данных int, то дробная часть теряется в результате целочисленного деления. В итоге останется незакрашенная часть (от 1 до 6 пикселей).
Чтобы убрать этот артефакт отрисовки, нужно перейти от целочисленного типа данных int, к типу данных с плавающей точкой float. Сделать это можно следующим образом заменив int на float
float h = ClientSize.Height / 7f;Остальной код останется таким же, потому что функция FillRectangle имеет перегрузку для float параметров и будет вызвана другая функция с тем же именем не заметно для вас. Остальные переменные будут автоматически конвертированы во float. Полный код хендлера отрисовки
private void Form1_Paint(object? sender, PaintEventArgs e)
{
float h = ClientSize.Height / 7f;
e.Graphics.FillRectangle(Brushes.Red, 0, 0, ClientSize.Width, h);
e.Graphics.FillRectangle(Brushes.Orange, 0, h, ClientSize.Width, h);
e.Graphics.FillRectangle(Brushes.Yellow, 0, 2 * h, ClientSize.Width, h);
e.Graphics.FillRectangle(Brushes.Green, 0, 3 * h, ClientSize.Width, h);
e.Graphics.FillRectangle(Brushes.LightBlue, 0, 4 * h, ClientSize.Width, h);
e.Graphics.FillRectangle(Brushes.Blue, 0, 5 * h, ClientSize.Width, h);
e.Graphics.FillRectangle(Brushes.Violet, 0, 6 * h, ClientSize.Width, h);
}
Более подробно про привидение типов читай здесь
Упражнения
- Вывести радугу вертикально
- Сделать чтобы при изменении размеров окна радуга перерисовывалась (для это смотри опции конструктора )
- Сделать вывод прямоугольников с помощью массива цветов и цикла for
- Написать функцию которая выводит радугу в заданный прямоугольник