Panel 控件将使用其 Paint 事件绘制自己。这会清除您使用 CreateGraphics() 绘制的任何内容。您需要改用它的 Paint 事件。然而,这会产生闪烁,你会看到它首先绘制它的背景。面板还经过优化,可用作具有低影响绘制开销的容器控件,您会看到它在调整大小时不会重新绘制自身。当您将其锚定到右侧或底部并调整表单大小时出现问题。
要解决这些问题,您应该从 Panel 派生您自己的类。在您的项目中添加一个新类并粘贴以下代码:
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
public class GradientPanel : Panel {
public GradientPanel() {
this.ResizeRedraw = true;
}
protected override void OnPaintBackground(PaintEventArgs e) {
using (var brush = new LinearGradientBrush(this.ClientRectangle,
Color.Black, Color.White, LinearGradientMode.ForwardDiagonal)) {
e.Graphics.FillRectangle(brush, this.ClientRectangle);
}
}
protected override void OnScroll(ScrollEventArgs se) {
this.Invalidate();
base.OnScroll(se);
}
}
构建+构建。将新控件从工具箱顶部拖放到表单上,替换原来的面板。您可以通过添加选择渐变开始和结束颜色的属性来获得创意,从而产生更普遍有用的控件,可以在其他项目中重复使用。请避免面板显示滚动条,因为 Windows 的“拖动时显示窗口内容”功能,您无法使滚动看起来不错。效果有点类似于 pogo。