【发布时间】:2011-01-17 13:59:02
【问题描述】:
我正在用 C# 制作一个 Windows 应用程序。我正在使用颜色对话框供用户选择颜色。我想将该颜色存储在数据库中,以便稍后检索它,并能够在用户界面中使用该颜色。
你会建议我什么方法?
【问题讨论】:
-
您是否已有用于此应用程序的数据库?
标签: c# database winforms colors color-picker
我正在用 C# 制作一个 Windows 应用程序。我正在使用颜色对话框供用户选择颜色。我想将该颜色存储在数据库中,以便稍后检索它,并能够在用户界面中使用该颜色。
你会建议我什么方法?
【问题讨论】:
标签: c# database winforms colors color-picker
最好的方法是将十六进制颜色存储在数据库字段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。
我使用函数 System.Drawing.Color.FromArgb() 和 System.Drawing.Color.ToArgb() 将颜色从整数转换为整数,并将其保存为 int 在数据库中
【讨论】:
我找到了一种使用 ColorDialog 获取所选颜色的十六进制代码的方法
ColorDialog 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;
}
}
我把它放在一个静态的“助手”类中。意味着您可以将值以人类可读格式和人类可编辑格式存储在数据库中(只要名称正确)。
【讨论】: