Kri*_*ian 0 c# controls background
我有一个面板控件,我想填充渐变.我有以下代码:
Brush brush = new LinearGradientBrush(pnlBody.ClientRectangle, Color.Black, Color.White, LinearGradientMode.ForwardDiagonal);
pnlBody.CreateGraphics().FillRectangle(brush, pnlBody.ClientRectangle);
Run Code Online (Sandbox Code Playgroud)
但它没有效果.如果我用表单替换pnlBody,那么它会将表单的颜色设置为精细,而不是面板.我有什么想法我做错了吗?谢谢!
Panel控件将使用其Paint事件绘制自身.通过使用CreateGraphics()消除您绘制的任何内容.您需要使用其Paint事件.然而,这会产生闪烁,你会看到它首先绘制背景.Panel也经过优化,可以作为容器控件,具有低影响的油漆开销,你会发现它在调整大小时不会重新绘制.将其锚定到右侧或底部并调整表单大小时出现问题.
要解决这些问题,您应该从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);
}
}
Run Code Online (Sandbox Code Playgroud)
构建+构建.将新控件从工具箱顶部拖放到表单上,替换原始面板.您可以通过添加选择渐变开始和结束颜色的属性来获得创意,从而生成一个更通用的控件,可以在其他项目中重用.避免面板显示滚动条,由于Windows"拖动时显示窗口内容"功能,无法使滚动看起来像样.效果有点类似于pogo.
| 归档时间: |
|
| 查看次数: |
3907 次 |
| 最近记录: |