我已经在VB.NET中开发了一个应用程序,现在我正在转向C#。
到目前为止一切顺利,但我遇到了一个问题。
我有一个带有图片的pictureBox。在这个图片框中,我想要一个渐变,从顶部透明到颜色“控制”,以与表格背景颜色融为一体。我已经在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中编码很重要。
答案 0 :(得分:3)
以下代码可以做到。
我可能会考虑将其作为自己的控件,并使用以下代码作为其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);
}
此代码生成以下图像