Pregunta

Tengo que escribir varios pequeños gradientes verticales (en un bucle) y, por lo tanto, creo que es más rápido volver a usar un LineArgradientBrush existente (¿verdad?)

Pero esto no es lo que esperaba que sucediera ...

  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

Por lo tanto, ¿hay un error en el código anterior, o una mejor manera de obtener varios gradientes verticales en un bucle, o una forma diferente de cambiar los colores de LineArgradientBrush?

gracias :)

¿Fue útil?

Solución

Construir un cepillo Cose casi nada en comparación con el trabajo realizado para dibujar algo con el cepillo.

Además, intente configurar la matriz completa en lugar de reemplazar un solo elemento.

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

Otros consejos

¡Esto es quizás académico (y quizás gran parte de ella es obvio en retrospectiva!), Pero la razón por la que cambia un solo color no funciona es que los colores se extraen del código no administrado antes de que se le presente.Dada una copia del color y eso es lo que está cambiando.O, para ponerlo más formalmente, el valor L en su declaración se pasa por valor y no hay un mecanismo para actualizar el original.

Cuando cambia la matriz de gradiente completa, el conjunto de la propiedad para la matriz escribe los cambios nuevamente al objeto no administrado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top