C# 实现颜色渐变窗体控件详细讲解

1.建议设置窗体为双缓冲绘图,可有效避免界面刷时引起的闪烁

this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true); 

2、代码实现

 private Color Color1 = Color.Gray; //起始颜色
 private Color Color2 = Color.White ; //目标颜色
 private float changeAngle = 0f;    //渐变角度

3.窗体绘制函数

 private void Form1_Paint(object sender, PaintEventArgs e)
 {
      Graphics g = e.Graphics;
      Rectangle grounRect = new Rectangle(0, 0, this.Width, this.Height);
      System.Drawing.Drawing2D.LinearGradientBrush backGround = new System.Drawing.Drawing2D.LinearGradientBrush(grounRect, Color1, Color2, changeAngle);
      g.FillRectangle(backGround, grounRect);
      backGround.Dispose();
}

补充:WPS中 LinearGradientBrush线性渐变的使用

1、颜色列排列

注:

(1)列排列的起始坐标为(0,0.5)终止坐标为(1,0.5)

(2)其中offset放置的位置参数是需要计算的

​ 例如:一共四个颜色,那么就是1/4=0.25;表示一个颜色0.25,第一个颜色为0.25,第二个就是再加上0.25=0.5,第三个就是0.75,第四个就是1

public MainWindow()
    {
      InitializeComponent();
  //实例化一个Border控件,来设置这个背景线性渐变
      Border bord1 = new Border();
      bord1.Width = bord1.Height=200;
      indext.Children.Add(bord1);
  //线性渐变设置开始
      LinearGradientBrush brush = new LinearGradientBrush();//实例化线性渐变对象
  //列排列的起始坐标为(0,0.5)终止坐标为(1,0.5)
      brush.StartPoint = new Point(0, 0.5);//设置线性渐变的二维起始坐标
      brush.EndPoint=new Point(1,0.5);//设置线性渐变的二维终止坐标
      brush.GradientStops.Add(new GradientStop(color: Colors.Pink,offset:0.25));
  //GradientStops表示设置渐变的终止点
  //GradientStop第一个参数color是设置颜色,第二个参数offset是设置的位置
      brush.GradientStops.Add(new GradientStop(color: Colors.IndianRed,offset:0.50));
      brush.GradientStops.Add(new GradientStop(color: Colors.LightSteelBlue,offset:0.75));
      brush.GradientStops.Add(new GradientStop(color: Colors.LightSeaGreen,offset:1.0));
      bord1.Background = brush;
  //最后将设置好的渐变背景赋值给Border控件
    }

2、颜色行排列

注:

行排列的时候,起始位置和终止位置只是改变了位置

列排列的起始坐标为(0.5,0)终止坐标为(0.5,1)

public MainWindow()
    {
      InitializeComponent();
      Border bord1 = new Border();
      bord1.Width = bord1.Height=200;
      indext.Children.Add(bord1);
      LinearGradientBrush brush = new LinearGradientBrush();
   //颜色行排列位置改变
      brush.StartPoint = new Point(0.5,0);
      brush.EndPoint=new Point(0.5,1);
      brush.GradientStops.Add(new GradientStop(color: Colors.Pink,offset:0.25));
      brush.GradientStops.Add(new GradientStop(color: Colors.IndianRed,offset:0.50));
      brush.GradientStops.Add(new GradientStop(color: Colors.LightSteelBlue,offset:0.75));
      brush.GradientStops.Add(new GradientStop(color: Colors.LightSeaGreen,offset:1.0));
      bord1.Background = brush;
    }

3、左上角到右下角斜着排列

注:

如果说要斜着排列,那么它的起始位置和终止位置不用设置计算,默认排列,只需要计算offset的位置大小

 public MainWindow()
    {
      InitializeComponent();
      Border bord1 = new Border();
      bord1.Width = bord1.Height=200;
      indext.Children.Add(bord1);
      LinearGradientBrush brush = new LinearGradientBrush();
      brush.GradientStops.Add(new GradientStop(color: Colors.Pink,offset:0.25));
      brush.GradientStops.Add(new GradientStop(color: Colors.IndianRed,offset:0.50));
      brush.GradientStops.Add(new GradientStop(color: Colors.LightSteelBlue,offset:0.75));
      brush.GradientStops.Add(new GradientStop(color: Colors.LightSeaGreen,offset:1.0));
      bord1.Background = brush;
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • C# 如何设置label(标签)控件的背景颜色为透明

    有时候,我们需要将控件的背景颜色设定为透明,比如说label(标签)控件.那么,如何将控件的背景颜色设定为透明?是不是只要将控件的BackColor属性设为Transparent(透明)就可以了呢?答案是否定的.看似很简单,其实不然,在实际操作过程中,很让人抓狂,抓狂到让你怀疑人生. 关于透明 首先要解释一下,什么叫做透明.在C#这里,透明就是指透过控件的背景,可以看到其父控件(容器)表面的颜色.所谓的透明,其实就是将父控件表面的颜色设定为自己的背景颜色. 设置控件背景颜色为透明的步骤和注意事项

  • C# 实现颜色的梯度渐变案例

    为了表示不同的浓度值,对颜色条应用颜色梯度变化,基本方法是对ARGB分量乘以一个渐变系数. 下面是对十种颜色应用的三个梯度值的过程. public void DrawRect(gasConcentration[] data) { Graphics graphic = pictureBox1.CreateGraphics(); Graphics graphic2 = pictureBox2.CreateGraphics(); int iCall2 = pictureBox2.Width/10; d

  • C#利用Label标签控件模拟窗体标题的移动及窗体颜色不断变换效果

    前言 标签(Label)控件是最常用的控件,在任何Windows应用程序中都可以中都可以看到标签控件.标签控件用于显示用户不能编辑的文件或图像,常用于对窗体上各种控件进行标注或说明. 在窗体中添加标签控件时,会创建一个Label类的实例.Label控件派生自Control控件,和其他控件一样支持事件,但通常不需要添加任何事件代码. 本文主要给大家介绍了关于C#用Label标签控件模拟窗体标题移动及窗体颜色不断变换的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 开发工

  • C#使用RichTextBox实现替换文字及改变字体颜色功能示例

    本文实例讲述了C#使用RichTextBox实现替换文字及改变字体颜色功能.分享给大家供大家参考,具体如下: 替换文字 private void GenerateEntity() { try { string result = ChangeWords("specific content..."); txtContent.Text = result; ChangeColor(); } catch (Exception ex) { MessageBox.Show("类生成失败!错

  • C# Color.FromArgb()及系统颜色对照表一览

    C#关于颜色值的表示: 常用的颜色值表示方式有两种,一种是10进制的RGB值表示,如(0,113,255),三个值分别表示(红,绿,蓝):一种是16进制的颜色码表示,如#ff3212.这两种形式在编程中都可以用到.若是在VS设计器中,设置某个控件的前景色或背景色时,可直接用0,113,255或#ff3212的形式,而在后台代码中,也可以通过Color.FromArgb()方法使用这两种形式来定义颜色. Color.FromArgb()方法的重载及使用 Color.FromArgb()方法共有四种

  • C# 实现颜色渐变窗体控件详细讲解

    1.建议设置窗体为双缓冲绘图,可有效避免界面刷时引起的闪烁 this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true); 2.代码实现 private Color Color1 = Color.Gray; //起始颜色 private Color Color2 = Color.White ; //目标颜色 private float changeAngle = 0f;

  • C# WinForm遍历窗体控件的3种方法

    目录 1.循环遍历 2.递归遍历 3.使用反射 1.循环遍历 private void GetControls(Control fatherControl) { Control.ControlCollection sonControls = fatherControl.Controls; foreach (Control control in sonControls) { listBox1.Items.Add(control.Name); } } 结果:能获取到Panel.GroupBox.Ta

  • C#实现winform用子窗体刷新父窗体及子窗体改变父窗体控件值的方法

    本文实例讲述了C#实现winform用子窗体刷新父窗体及子窗体改变父窗体控件值的方法.分享给大家供大家参考.具体如下: 第一种方法: 用委托,Form2和Form3是同一组 Form2 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows

  • 如何:对Windows 窗体控件进行线程安全调用

    示例 访问 Windows 窗体控件本质上不是线程安全的.如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态.还可能出现其他与线程相关的 bug,包括争用情况和死锁.确保以线程安全方式访问控件非常重要. .NET Framework 有助于在以非线程安全方式访问控件时检测到这一问题.在调试器中运行应用程序时,如果创建某控件的线程之外的其他线程试图调用该控件,则调试器会引发一个 InvalidOperationException,并提示消息:"从不是创建控件 contr

  • C++获得其他程序窗体控件中信息的方法

    本文实例讲述了C++获得其他程序窗体控件中信息的方法.分享给大家供大家参考.具体分析如下: 这里演示了获得其他程序窗体控件信息的方法, 用FindWindow API找到文本框句柄,用SendMessage(WM_GETTEXT)获得文本 #include <windows.h> BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrev

  • 在多线程中调用winform窗体控件的实现方法

    本文实例讲述了在C#中实现多线程中调用winform窗体控件的方法,对于C#程序设计的学习有着很好的借鉴参考价值.具体方法如下: 首先,由于Windows窗体控件本质上不是线程安全的.因此如果有两个或多个线程适度操作某一控件的状态(set value),则可能会迫使该控件进入一种不一致的状态.还可能出现其他与线程相关的 bug,包括争用和死锁的情况.于是在调试器中运行应用程序时,如果创建某控件的线程之外的其他线程试图调用该控件,则调试器会引发一个 InvalidOperationExceptio

  • 浅谈C#跨线程调用窗体控件(比如TextBox)引发的线程安全问题

    如何:对 Windows 窗体控件进行线程安全调用 访问 Windows 窗体控件本质上不是线程安全的. 如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态. 还可能会出现其他与线程相关的 Bug,例如争用情况和死锁. 确保以线程安全方式访问控件非常重要. 在未使用 Invoke 方法的情况下,从不是创建某个控件的线程的其他线程调用该控件是不安全的. 以下非线程安全的调用的示例. // This event handler creates a thread that

  • Flutter 分页功能表格控件详细解析

    前2天有读者问到是否有带分页功能的表格控件,今天分页功能的表格控件详细解析. PaginatedDataTable PaginatedDataTable是一个带分页功能的DataTable,生成一批数据,项目中此一般通过服务器获取,定义model类: class User { User(this.name, this.age, this.sex); final String name; final int age; final String sex; } 生成数据: List<User> _d

  • C#在Windows窗体控件实现内容拖放(DragDrop)功能

    一.将控件内容拖到其他控件 在开发过程中,经常会有这样的要求,拖动一个控件的数据到另外一个控件中.例如将其中一个ListBox中的数据拖到另一个ListBox中.或者将DataGridView中的数据拖动到TreeView的某个节点. 在应用程序中,是通过处理一系列事件,如DragEnter,DragLeave和DragDrop事件来实现在Windows应用程序中的拖放操作的.通过使用这些事件参数中的可用信息,可以轻松实现拖放操作. 拖放操作在代码中是通过三步实现的,首先是启动拖放操作,在需要拖

  • ASP.NET中CheckBoxList复选框列表控件详细使用方法

    可以使用两种类型的 ASP.NET 控件将复选框添加到 Web 窗体页上:单独的 CheckBox 控件或 CheckBoxList 控件.两种控件都为用户提供了一种输入布尔型数据(真或假.是或否)的方法. 本文主要介绍CheckBoxList,不言而喻,看到List就知道是一个列表(集合),一个控件可以包含多个CheckBox,下面让我们来看看具体的用法. 1.绑定数据 复制代码 代码如下: this.lngCatalogID.DataSource = dt; //这里我绑到DataTable

随机推荐