2

我已经在 VB.NET 中开发了一个应用程序,现在我正在迁移到 C#。

到目前为止一切都很顺利,但我面临一个问题。

我有一个图片框,里面有一张图片。在这个图片框上,我想要一个渐变,从自上而下的透明到颜色“控件”,以与表单背景颜色融为一体。我已经在 VB.net 中完成了这项工作,但是当我尝试在 C# 中执行此操作时,似乎绘制了渐变,但在图片后面。

这是我尝试过的:

private void PictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
    Color top = Color.Transparent;
    Color bottom = Color.FromKnownColor(KnownColor.Control);

    GradientPictureBox(top, bottom, ref PictureBox1, e);
}

public void GradientPictureBox(Color topColor, Color bottomColor, ref PictureBox PictureBox1, System.Windows.Forms.PaintEventArgs e)
{
    LinearGradientMode direction = LinearGradientMode.Vertical;
    LinearGradientBrush brush = new LinearGradientBrush(PictureBox1.DisplayRectangle, topColor, bottomColor, direction);
    e.Graphics.FillRectangle(brush, PictureBox1.DisplayRectangle);
    brush.Dispose();
}   

然而,这实际上似乎有效,但它再次绘制了图片背后的渐变。在 VB.net 中,它在没有任何额外代码的情况下将其绘制在图片之上。

我需要添加任何额外的东西吗?

如果在 C# 2010 express 中编码很重要。

4

1 回答 1

4

下面的代码做到了。

我也许会考虑让它成为它自己的控件,并使用下面的代码作为它的 Paint 事件。

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawImage(pictureBox1.Image, 0, 0, pictureBox1.ClientRectangle, GraphicsUnit.Pixel);

        Color top = Color.FromArgb(128, Color.Blue);
        Color bottom = Color.FromArgb(128, Color.Red);
        LinearGradientMode direction = LinearGradientMode.Vertical;
        LinearGradientBrush brush = new LinearGradientBrush(pictureBox1.ClientRectangle, top, bottom, direction);

        e.Graphics.FillRectangle(brush, pictureBox1.ClientRectangle);
    }

此代码生成以下图像

在此处输入图像描述

于 2013-10-03T14:04:06.983 回答