我正在使用C#制作一个Windows应用程序。我使用颜色对话框让用户选择颜色。我想将该颜色存储在数据库中,并能够在以后检索它,以便在用户界面中使用该颜色。
你会建议我采取什么样的方法呢?
我正在使用C#制作一个Windows应用程序。我使用颜色对话框让用户选择颜色。我想将该颜色存储在数据库中,并能够在以后检索它,以便在用户界面中使用该颜色。
你会建议我采取什么样的方法呢?
nvarchar(7)
中......例如,输入可能为#ffffff
。使用varchar(6)
同样可行,并且在您的数据库中占用更少的空间。只需确保在代码中附加#
。System.Drawing.ColorTranslator.FromHtml(someHexColor)
。// Hex to Control Color
var myColor = "#[color from database]";
var myControlColor = System.Drawing.ColorTranslator.FromHtml(myColor);
// Control Color to Hex
var colorBlue = System.Drawing.Color.Blue;
var hexBlue = System.Drawing.ColorTranslator.ToHtml(colorBlue);
varchar
足以满足你对 RGB 值的 Unicode 无忧需求。 - CAbbottToHtml
有时会返回十六进制值,有时会返回颜色的名称(取决于是否有可用的名称)。虽然我确信FromHtml
都能正确翻译,但是你会失去与存储在数据库中的值的一致性,更不用说一些颜色名称超过7个字符了。 - musefanColorDialog col = new ColorDialog();
col.ShowDialog();
string color = col.Color.ToArgb().ToString("x");
color = color.Substring(2, 6);
color = "#" + color;
MessageBox.Show(color);
button1.BackColor = System.Drawing.ColorTranslator.FromHtml(color);
虽然这个问题已经问了很久,但这可能会有用。它允许您在单个函数调用中转换Color
和String
,无论颜色是SystemColor
、KnownColor
还是直接的ARGB
。代码:
public static Color Str2Color(string cS, Color oDefault)
{
string cColor;
Color oColor;
try
{
if ((cS == null) || (cS == ""))
{
return oDefault;
}
if (cS.StartsWith("[SystemColor]"))
{
cColor = cS.Substring(13);
oColor = Color.FromName(cColor);
return oColor;
}
else if (cS.StartsWith("[KnownColor]"))
{
cColor = cS.Substring(12);
oColor = Color.FromName(cColor);
return oColor;
}
else if (cS.StartsWith("[ARGB]"))
{
cColor = cS.Substring(6);
oColor = Color.FromArgb(Convert.ToInt32(cColor));
return oColor;
}
else
throw new IndexOutOfRangeException();
}
catch (Exception ex)
{
return oDefault;
}
}
public static string Color2Str(Color oColor)
{
// To note:
// 1. System.Windows.SystemColors => [SystemColor]
// Examples: SystemColors.Control, SystemColors.Window, SystemColors.WindowFrame. These are synonymous with System.Drawing.SystemColors, and are defined in the Windows style selected by the user.
// 2. Windows.UI.Colors => [KnownColor]
// Examples: Colors.AliceBlue, Colors.AntiqueWhite, Colors.Aqua, Colors.Aquamarine etc. These are named colors that I think are the same as those expressable in HTML
// 3. ARGB => [ARGB]
// Example: #ffff77 - hex representation of the RGB colour scheme.
string cColor;
try
{
if (oColor.IsSystemColor)
{
cColor = "[SystemColor]" + oColor.Name;
}
else if (oColor.IsKnownColor)
{
cColor = "[KnownColor]" + oColor.Name;
}
else
{
cColor = "[ARGB]" + oColor.ToArgb();
}
return cColor;
}
catch (Exception ex)
{
throw ex;
}
}
我将它放在一个静态的“帮助器”类中。这意味着你可以以人类可读和可编辑的格式(只要你命名正确)将值存储在数据库中。