Вопрос

Я должен написать несколько маленьких вертикальных градиентов (на петле), и поэтому я думаю, что это быстрее повторно использовать существующую линеариментную брусью (правильно?)

Но это не то, что я ожидал, что произойдет ...

  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-значение в вашем операторе передается по значению, и не существует механизма обновления оригинала.

Когда вы изменяете весь градиентный массив, сеттер свойства для массива записывает изменения обратно в неуправляемый объект.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top