【发布时间】:2013-10-02 19:57:22
【问题描述】:
我已经在 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 中编码很重要。
【问题讨论】:
-
语言切换本身似乎不太可能导致这种情况。执行程序不知道它最初是用什么语言编写的。你能发布你原来的 VB.NET 代码吗?
-
发布的代码运行良好。
-
为什么你通过 ref 传递 PictureBox1?
-
Alessandro D'Andria - 使代码为以后与多个图片框一起使用做好准备。但由于它无法正常工作,我看到的空白内的代码还没有准备好。
标签: c# gradient picturebox