Pergunta

Eu tenho que escrever vários pequenos gradientes verticais (em um loop) e então acho que é mais rápido reutilizar um LinearGradientBrush existente (correto?)

Mas não era isso que eu esperava que acontecesse...

  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

Então, há um erro no código acima, ou uma maneira melhor de obter vários gradientes verticais em um loop, ou uma maneira diferente de alterar as cores do LinearGradientBrush?

Obrigado :)

Foi útil?

Solução

Construir um pincel não custa quase nada comparado ao trabalho feito para realmente desenhar algo com o pincel.

Além disso, tente definir o array inteiro em vez de substituir um único elemento.

myBrush.LinearColors = new Color[2] { Color.Blue, Color.Whatever };

Outras dicas

Isso talvez seja acadêmico (e talvez muito disso seja óbvio em retrospecto!), mas a razão pela qual alterar uma única cor não funciona é que as cores são extraídas de código não gerenciado antes de serem apresentadas a você - você recebe uma cópia da cor e é isso que você está mudando.Ou, para ser mais formal, o valor l na sua instrução é passado por valor e não há mecanismo para atualizar o original.

Quando você altera toda a matriz de gradiente, o configurador de propriedades da matriz grava as alterações de volta no objeto não gerenciado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top