2

いくつかの小さな垂直グラデーションを (ループで) 記述する必要があるため、既存の LinearGradientBrush を再利用する方が速いと思います (正しいですか?)

しかし、これは私が期待したことではありません...

  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

では、上記のコードにエラーがあるのでしょうか、ループで複数の垂直グラデーションを取得するより良い方法でしょうか、または LinearGradientBrush の色を変更する別の方法でしょうか?

ありがとう :)

4

2 に答える 2

2

ブラシを作成するコストは、実際にブラシで何かを描画するために行う作業に比べてほとんどかかりません。

また、単一の要素を置き換えるのではなく、配列全体を設定してみてください。

myBrush.LinearColors = new Color[2] { Color.Blue, Color.Whatever };
于 2010-07-23T21:26:38.267 に答える
1

これはおそらく学術的です(そしておそらくその多くは振り返ってみると明らかです!)が、単一の色を変更しても機能しない理由は、色が管理されていないコードから抽出されてから提示されるためです-コピーが提供されます色のそしてそれはあなたが変えているものです。または、より正式に言えば、ステートメントのl値は値によって渡され、元の値を更新するメカニズムはありません。

グラデーション配列全体を変更すると、配列のプロパティセッターが変更をアンマネージオブジェクトに書き戻します。

于 2010-08-26T09:27:35.590 に答える