3

私はwinformの境界線をパネルで作っています。下のパネルでグラデーションを使用したかったのですが、問題が発生しています。

ここでフォームの背景をペイントするために使用した方法とほぼ同じ方法を使用していますが、パネルに赤い十字が表示されます。なぜこれが起こっているのかわかりませんが、うまくいくはずです。

画像:ここに画像の説明を入力

これはペイントする私のコードです:

public void Colorear_Barra_abajo(object sender, PaintEventArgs e)
    {
        Rectangle r = this.ClientRectangle;

        if (r.Width > 0 && r.Height > 0)
        {
            Color c1 = Color.FromArgb(255, 54, 54, 54);
            Color c2 = Color.FromArgb(255, 98, 98, 98);

            LinearGradientBrush br = new LinearGradientBrush(r, c1, c2, 90, true);
            ColorBlend cb = new ColorBlend();
            cb.Positions = new[] { (float)0.357, (float)0.914 };
            cb.Colors = new[] { c1, c2 };
            br.InterpolationColors = cb;

            // paint
            e.Graphics.FillRectangle(br, r);
        }
    }

そして、これは私がそれを呼び出す方法です(panel_Borde_abajoはパネルです):

public Base_Form_Standard()
    {
        InitializeComponent();
        panel_Borde_abajo.Paint += new PaintEventHandler(Colorear_Barra_abajo);
    }

以前はこのメソッドを使用して、フォーム以外の他のコントロール (menustrip fe) を描画していましたが、うまく機能しましたが、これは特に機能していません。

たとえば、これは正しく機能し、赤い十字は表示されません。

public void Form_Background(object sender, PaintEventArgs e)
    {
        Rectangle r = this.ClientRectangle;

        if (r.Width > 0 && r.Height > 0)
        {
            Color c1 = Color.FromArgb(255, 252, 254, 255);
            Color c2 = Color.FromArgb(255, 247, 251, 253);
            Color c3 = Color.FromArgb(255, 228, 239, 247);
            Color c4 = Color.FromArgb(255, 217, 228, 238);
            Color c5 = Color.FromArgb(255, 177, 198, 215);

            LinearGradientBrush br = new LinearGradientBrush(r, c1, c5, 90, true);
            ColorBlend cb = new ColorBlend();
            cb.Positions = new[] { 0, (float)0.3, (float)0.486, (float)0.786, 1 };
            cb.Colors = new[] { c1, c2, c3, c4, c5 };
            br.InterpolationColors = cb;

            // paint
            e.Graphics.FillRectangle(br, r);
        }
    }

誰かが私を助けてくれたら、それは素晴らしいことです!

4

1 に答える 1

3

ColorBlend.Positionsプロパティに無効な値を使用しているようです。次のコードを試してください。

ColorBlend cb = new ColorBlend();
cb.Positions = new[] { 0.0f, 0.357f, 0.914f, 1.0f };
                       ^^^^                  ^^^^

ドキュメントによると:

この配列の要素は、0.0f ~ 1.0f の float 値で表され、配列の最初の要素は 0.0f で、最後の要素は 1.0f である必要があります。

于 2012-12-22T18:03:19.623 に答える