C# 将ConsoleColor更改为十六进制值
所以我最近开始学习C#,我正在努力将控制台的背景颜色更改为十六进制值。这是我的密码:C# 将ConsoleColor更改为十六进制值,c#,.net,colors,background,console,C#,.net,Colors,Background,Console,所以我最近开始学习C#,我正在努力将控制台的背景颜色更改为十六进制值。这是我的密码: using System; namespace MyFisrtC_App { class Program { static void Main(string[] args) { ConsoleColor BGColor = ConsoleColor.White; ConsoleColor FGColor = Con
using System;
namespace MyFisrtC_App
{
class Program
{
static void Main(string[] args)
{
ConsoleColor BGColor = ConsoleColor.White;
ConsoleColor FGColor = ConsoleColor.Black;
Console.Title = "Dumb App";
Console.BackgroundColor = BGColor;
Console.ForegroundColor = FGColor;
Console.Clear();
Console.WriteLine("This is just a simple dumb app. There is nothing special about it.");
Console.ReadKey();
}
}
}
此外,如果你知道如何在C#中更改字体,那将非常酷
using System;
namespace TestCSharp
{
class Program
{
static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.White;
Console.BackgroundColor = ConsoleColor.Red;
Console.WriteLine("background red and text white");
Console.ResetColor();
Console.WriteLine("Color reset");
Console.ReadKey();
}
}
}
不能使用十六进制值,可以使用以下颜色:
黑色,
深蓝色,
暗绿色,
黑暗势力,
黑暗的,
黑金塔,
黑暗之王,
灰色
暗雷,
蓝色
绿色
青色,
红色
洋红
黄色的,
白色控制台颜色是一个枚举,本质上是一个具有已定义名称的数字列表。因此,您可以执行以下操作将数字转换为颜色
int number = 7;
ConsoleColor colour = (ConsoleColor)number;
如果你想从十六进制开始,使用下面的
string hex = "0A";
int number = Convert.ToInt32(hex, 16);
ConsoleColor colour = (ConsoleColor)number;
例如,您只需要确保数字不超出枚举的长度
if(number < Enum.GetValues<ConsoleColor>().Length -1 && number >= 0)
{
Console.ForeGroundColor = (ConsoleColor)number;
}
if(number=0)
{
Console.ForeGroundColor=(ConsoleColor)编号;
}
很遗憾,由于控制台API的限制,这是不可能的
但是,您可以计算与API中存在的颜色最接近的颜色
static ConsoleColor ClosestConsoleColor(byte r, byte g, byte b)
{
ConsoleColor ret = 0;
double rr = r, gg = g, bb = b, delta = double.MaxValue;
foreach (ConsoleColor cc in Enum.GetValues(typeof(ConsoleColor)))
{
var n = Enum.GetName(typeof(ConsoleColor), cc);
var c = System.Drawing.Color.FromName(n == "DarkYellow" ? "Orange" : n); // bug fix
var t = Math.Pow(c.R - rr, 2.0) + Math.Pow(c.G - gg, 2.0) + Math.Pow(c.B - bb, 2.0);
if (t == 0.0)
return cc;
if (t < delta)
{
delta = t;
ret = cc;
}
}
return ret;
}
静态控制台颜色关闭控制台颜色(字节r、字节g、字节b)
{
控制台颜色ret=0;
双rr=r,gg=g,bb=b,delta=double.MaxValue;
foreach(Enum.GetValues中的ConsoleColor cc(typeof(ConsoleColor)))
{
var n=Enum.GetName(typeof(ConsoleColor),cc);
var c=System.Drawing.Color.FromName(n==“DarkYellow”?“Orange”:n);//错误修复
var t=数学功率(c.R-rr,2.0)+数学功率(c.G-gg,2.0)+数学功率(c.B-bb,2.0);
如果(t==0.0)
返回cc;
if(t
这是来自:credits all to@Glenn,它将数字转换为颜色,但我如何才能让它与整个十六进制值一起工作?@IKDev我更新了我的代码,将十六进制值转换为整数。它允许您仅使用allready现有控制台颜色的十六进制值,还是也可以与自定义十六进制值一起工作?请注意,“十六进制”在此答案中,与将RGB(255、255、255)值写入十六进制(FFFFFF)无关-因为答案试图解释
ConsoleColor
是enum
,所以任何enum
都可以强制转换为整数,这个答案告诉你如何将一个十六进制
转换成一个整数
,然后再转换成枚举
。据我所知,你只能使用这个枚举暴露的颜色。可能有一个Pinvoke允许RGB颜色,但我不太确定。很遗憾,你不能使用十六进制值。我的意思是,这是最接近我想要实现的。但我意识到你实际上不能使用十六进制值或任何其他颜色,而只能使用ConsoleColor中的颜色