Как изменить цвета GDI + Lineargradientbrush?
-
28-09-2020 - |
Вопрос
Я должен написать несколько маленьких вертикальных градиентов (на петле), и поэтому я думаю, что это быстрее повторно использовать существующую линеариментную брусью (правильно?)
Но это не то, что я ожидал, что произойдет ...
Drawing2D.LinearGradientBrush myBrush = new Drawing2D.LinearGradientBrush(new Rectangle(0, 0, 200, 200), Color.Red, Color.Black, Drawing2D.LinearGradientMode.Vertical);
myBrush.LinearColors[1] = Color.Blue;
MsgBox(myBrush.LinearColors[1].ToString); //Returns black
.
Итак, есть ли ошибка по указанному вышеуказанному коду, либо лучший способ получить несколько вертикальных градиентов на петле или другой способ изменить цвета линеаридиентных осколков?
Спасибо :)
Решение
Построение кисти стоит почти ничего по сравнению с выполненной работой, чтобы на самом деле сделать что-то с помощью кисти.
Также попробуйте установить весь массив вместо замены одного элемента.
myBrush.LinearColors = new Color[2] { Color.Blue, Color.Whatever };
. Другие советы
Это, возможно, академик (и, возможно, многое из этого очевидно в ретроспективе!), Но причина, изменяющая один цвет, не работает, состоит в том, что цвета извлекаются из не управляемого кода, прежде чем представить вам - выУчитывая копию цвета, и это то, что вы меняете.Или, чтобы поставить его формально, значение L-значение в вашем операторе передается по значению, и не существует механизма обновления оригинала.
Когда вы изменяете весь градиентный массив, сеттер свойства для массива записывает изменения обратно в неуправляемый объект.