WinForms中的多色线性渐变

如何在WinForms中创建多色线性渐变? System.Drawing.Drawing2D.LinearGradientBrush只允许两种颜色。

与此处相同的答案:winforms中的多色对角线渐变winforms中的多色对角线渐变

这是一个小例子

void MainFormPaint(object sender, PaintEventArgs e) { LinearGradientBrush br = new LinearGradientBrush(this.ClientRectangle, Color.Black, Color.Black, 0 , false); ColorBlend cb = new ColorBlend(); cb.Positions = new[] {0, 1/6f, 2/6f, 3/6f, 4/6f, 5/6f, 1}; cb.Colors = new[] {Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Blue, Color.Indigo, Color.Violet}; br.InterpolationColors= cb; // rotate br.RotateTransform(45); // paint e.Graphics.FillRectangle(br, this.ClientRectangle); } 

这是结果

在此处输入图像描述

希望这可以帮助

我创建了一个面板,因为我可以将它用作我项目的容器。 代码非常简单,就是如果你想实现Punker76提供的不停止。

 public partial class GradientPanel : Panel { private Color _startColor = Color.Transparent; private Color _stopColor = Color.Transparent; private bool _angleScales = false; private int _angle = 0; ///  /// litle helper to redraw when property changes, a litle OnNofifyChanged for the /// IDE causing it to update ///  /// Making sure the values are comparable /// the field that is compared /// the value that is assigned /// Updates re-paints the panel when needed private void Set(ref T field, T value) { if (field.Equals(value)) return; field = value; base.Refresh(); } [Category("Appearence"),Description("Specifies the start colour")] public Color StartColor { get => _startColor; set => Set(ref _startColor, value); } [Category("Appearence"), Description("Specifies the stop colour")] public Color StopColor { get => _stopColor; set => Set(ref _stopColor, value); } [Category("Appearence"), Description("The angle, measured in degrees clockwise from the x-axis, of the gradient's orientation line.")] public int Angle { get => _angle; set => Set(ref _angle , value); } [Category("Appearence"), Description("If Set to true to specify that the angle is affected by the transform associated with this panel")] public bool AngleScales { get => _angleScales; set => Set(ref _angleScales, value); } protected override void OnPaint(PaintEventArgs e) { LinearGradientBrush br = new LinearGradientBrush(e.ClipRectangle, StartColor, StopColor, Angle, AngleScales); e.Graphics.FillRectangle(br, e.ClipRectangle); base.OnPaint(e); } } 

拥有一个控件使重用效率更高。 请记住,在您看到更改在控件中进行更改时,您可能需要重新构建项目。