Использование C # WinForms У меня есть форма, на которой я рисую градиентный фон от светло-синего до темно-синего. У меня есть несколько кнопок и несколько ярлыков, которые Я уже пытался установить прозрачный фоновый цвет , так как я хочу, чтобы фон просвечивал - особенно для ярлыков, но это не похоже на работу.
Но я заметил, что картина также рисует надписи, хотя код присутствует только в событии form_paint.
Как сделать так, чтобы этикетки не содержали одинаковую штриховку, но были прозрачными? например метки вверху формы будут светло-голубыми, а метки внизу - темно-синими.
private void frmOptions_Paint(object sender, PaintEventArgs e)
{
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
Rectangle rectangle = e.ClipRectangle;
using (Brush aBrush = new LinearGradientBrush(rectangle, Color.LightBlue, Color.DarkBlue, LinearGradientMode.Vertical))
{
e.Graphics.FillRectangle(aBrush, rectangle);
}
}
Большое спасибо за любую помощь в этом.
EDIT:
Я только что прошел по строкам кода для его отладки и заметил, что событие рисования вызывается для КАЖДОГО объекта в форме - меток и кнопок, прямоугольник в строке 2 выше имеет размер каждый раз. Так что теперь я действительно сбит с толку, почему он вызывается для каждого объекта в форме.
РЕДАКТИРОВАТЬ 2:
Просто проходил код моего проекта быстрого тестирования (см. Комментарий ниже), а также заметил, что событие рисования вызывается для каждого объекта. Разница заключается в том, что в тестовом проекте нет строки "Rectangle rectangle = e.ClipRectangle;
" - он в основном использует ширину и высоту формы. где мой код выше устанавливает прямоугольник в ClipRectangle - размер каждой метки и кнопки ... Это нормальное поведение? Если это так, то мне кажется, что мне нужно ответить на следующий ответ Рениуза.
РЕДАКТИРОВАТЬ 3
Я изменил строку cliprectangle на "Rectangle rectangle = new Rectangle(0, 0, this.Width, this.Height);
". Это, кажется, делает прозрачный вид, как и должно, но событие рисования все еще вызывается для каждого объекта в форме - хорошая работа, есть только 7 из, так что это рисую 8 раз :( Думаю, я еще посмотрю на код "TransparentLabel", чтобы проверить это.