C# 获取System.Color 中所有颜色

该代码片段展示了如何从.NET的System.Color类型中提取已知颜色,筛选出满足条件的色彩,然后打乱顺序形成随机颜色数组,用于可能的UI设计或编程应用中.

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

System.Color 中的全部颜色提取出来,经过简单筛选后打乱顺序,做成随机颜色数组。 

//用于存取取出的颜色对象 
List<Color> colorList = new List<Color>(); 
//通过GetMember获取所有的公共成员 
foreach (var item in typeof(Color).GetMembers()) 
{ 
	//只取属性且为属性中的已知Color,剔除byte属性以及一些布尔属性等(A B G R IsKnownColor Name等) 
	if (item.MemberType == System.Reflection.MemberTypes.Property 
	    && System.Drawing.Color.FromName(item.Name).IsKnownColor == true) 
	{ 
		Color color = System.Drawing.Color.FromName(item.Name); 
		double r = color.R, g = color.G, b = color.B;
		double d = (r + g + b) / 3.0;
		double s = Math.Sqrt(((r - d) * (r - d) + (g - d) * (g - d) + (b - d) * (b - d)) / 2);
		if (d < 225 && s > 15)  // 简单的颜色筛选
			colorList.Add(color);
	} 
} 

// 打乱顺序做成随机颜色
Color[] colors = new Color[colorList.Count];
Random rnd = new Random();
int n = rnd.Next(10, colorList.Count);
for (int i = 0; i < GlobalRes.colors.Length;)
{
	int c = colorList.Count / n;
	for (int j = 0; j < c; j++)
	{
		int k = (j + 1) * n;
		if (k < colorList.Count)
		{
			GlobalRes.colors[i++] = colorList[k];
			colorList.RemoveAt(k);
		}
	}
	if (colorList.Count > 20)
		n = rnd.Next(10, colorList.Count);
	else
	{
		for (int j = 0; j < colorList.Count; j++)
		{
			GlobalRes.colors[i++] = colorList[j];
		}
	}
}

<think>嗯,用户想了解C#System.Drawing.Color.Control的用法和值。首先,我需要回忆一下这个属性的基本定义。System.Drawing.Color.Control是System.Drawing命名空间中的一个静态属性,用来获取Windows系统主题中控件默认的背景颜色。这个颜色通常用于按钮、文本框等控件的背景色,保持与操作系统主题的一致性。 接下来,我需要确定它的具体值。Color.Control的值会根据用户当前的操作系统主题而变化。比如,在默认的浅色主题下,可能显示为浅灰色(比如#F0F0F0),而在深色主题下可能是深灰色(比如#3C3C3C)。不过具体的RGB值可能需要查阅官方文档或者通过代码示例来获取。 然后,关于用法,用户可能在Windows Forms应用程序中使用这个属性来设置控件的背景色,确保UI与系统主题一致。例如,设置一个Panel的背景色为Color.Control,这样当用户切换系统主题时,应用程序的控件颜色会自动适应,而无需手动更改代码。 此外,用户可能需要了解如何动态获取这个颜色,或者如何在不同的场景下应用它。比如,在自定义控件开发中,使用系统颜色可以提高应用程序的兼容性和用户体验。同时,需要注意在跨平台应用中,这个属性可能只在Windows环境下有效,其他平台可能有不同的实现方式。 还需要考虑用户可能的误区,比如直接硬编码颜色值而不是使用系统提供的Color.Control,这样会导致应用程序在不同主题下显示不一致。因此,强调使用系统颜色的重要性是有必要的。 最后,可能需要提供一些代码示例,展示如何获取Color.Control的值,并将其应用到控件上。同时,提醒用户可以通过Color.Control.Name、R、G、B等属性进一步了解颜色的详细信息。</think>在C#中,`System.Drawing.Color.Control`是Windows系统主题颜色中的标准控件背景色,用于保持GUI控件与操作系统视觉风格的一致性[^1]。 ### 一、属性值说明 $$ARGB = (\text{A=255}, \text{R=240}, \text{G=240}, \text{B=240}) \quad \text{对应十六进制} \quad \#FFF0F0F0$$ 该颜色值对应浅色主题下的默认控件背景色,实际显示会根据系统主题自动变化(如深色模式会显示不同的灰度值) ### 二、典型用法示例 ```csharp // 设置控件背景色 button1.BackColor = System.Drawing.Color.Control; // 创建与系统主题一致的画刷 using (SolidBrush brush = new SolidBrush(System.Drawing.Color.Control)) { e.Graphics.FillRectangle(brush, this.ClientRectangle); } // 颜色值调试输出 Console.WriteLine($"Control color: {Color.Control.GetHue():F2}° {Color.Control.GetSaturation():P0} {Color.Control.GetBrightness():P0}"); ``` ### 三、重要特性 1. **动态适应**:当系统主题变更时,该颜色值会自动更新,无需重启应用程序 2. **跨控件兼容**:适用于Button、Panel、TextBox等所有标准WinForms控件 3. **对比度保障**:系统自动保证与`SystemColors.ControlText`的前景色保持可读性对比
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值