В .NET есть несколько классов заливки, базовым для которых является Brush. Это класс, который позволяет задавать параметры заливки для таких фигур, как прямоугольник, эллипс, текст и т. д. Самый простой способ получить кисть нужного цвета — использовать системную кисть из перечисления SystemBrushes. Например, следующая строка создает заливку, которой в Windows окрашиваются рабочие области окон:
Brush brush = SystemBrushes.Window;
Класс Brush абстрактный, и вы не можете создать непосредственно его экземпляр, потому что у него есть абстрактные методы, которые не реализованы, но созданы для того, чтобы их реализовывали наследники. Самый простой и самый распространенный наследник: SolidBrush. Это не от русского слова "солидный", а от английского solid — сплошной, т. е. эта заливка заполняет область полностью одним цветом и одним узором:
Brush brush = new SolidBrush(Color.Red); e.Graphics.FillRectangle(brush, new Rectangle(10, 10, ClientSize.Width - 20, ClientSize.Height - 20));
В этом примере сначала создается новая кисть для закраски прямоугольника красным цветом. Во второй строке с помощью метода FillRectangle() я закрашиваю созданной кистью большой прямоугольник.
Обратите внимание, как я инициализирую новую кисть. Несмотря на то, что я создаю SolidBrush, я присваиваю результат классу предка Brush. Это чудеса ООП. Я мог бы присваивать результат переменной SolidBrush, и на дальнейшую работу это не повлияло бы:
SolidBrush brush = new SolidBrush(Color.Red);
Но у меня выработалась привычка присваивать именно Brush, не знаю почему.
Еще одна кисть, которую мы рассмотрим, — LinearGradientBrush:
Point p1 = new Point(10, 10); Point p2 = new Point(10, ClientSize.Height - 10); Brush brush = new LinearGradientBrush(p1, p2, Color.Red, Color.Wheat); e.Graphics.FillRectangle(brush, new Rectangle(10, 10, ClientSize.Width - 20, ClientSize.Height - 20));
Кисть LinearGradientBrush позволяет создавать линейный градиент. В качестве конструктора объект получает две точки (начало и конец градиента) и два цвета (начальный и конечный цвета градиента). Имея эти данные, система сама раскрасит заполняемую область плавным переходом от одного цвета к другому.