Domanda

Devo scrivere diverse piccole sfumature verticali (su un ciclo) e quindi penso che sia più veloce riutilizzare un lineargradrientbrush esistente (corretto?)

Ma questo non è quello che mi aspettavo di accadere ...

  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
.

Quindi, è presente un errore sul codice sopra, o un modo migliore per ottenere diversi gradienti verticali su un ciclo o un modo diverso per cambiare i colori del lineargradrientbrush?

Grazie :)

È stato utile?

Soluzione

Costruire un pennello costa quasi nulla rispetto al lavoro svolto per disegnare effettivamente qualcosa con il pennello.

Inoltre, prova a impostare l'intero array invece di sostituire un singolo elemento.

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

Altri suggerimenti

Questo è forse accademico (e forse gran parte è ovvio in retrospettiva!), Ma il motivo che cambia un singolo colore non funziona è che i colori vengono estratti dal codice non gestito prima di essere presentato - seiData una copia del colore e questo è ciò che stai cambiando.Oppure, per metterlo più formalmente, il valore L nella tua dichiarazione è passato per valore e non c'è meccanismo per aggiornare l'originale.

Quando si modifica l'intero array di sfumatura, il setter della proprietà per l'array scrive le modifiche all'oggetto non gestito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top