C# 使用ColorDialog在datagrid中设置颜色

C# 使用ColorDialog在datagrid中设置颜色,c#,colors,dialog,C#,Colors,Dialog,好吧,我快被谷歌搜索出来了。我似乎犯了一个错误,在测试之前设计系统,看看它是否真的有效。基本上,我向颜色对话框提供提示,以获得用户选择的颜色。我正在使用以下代码: ColorDialog MyDialog = new ColorDialog(); // Keeps the user from selecting a custom color. MyDialog.AllowFullOpen = false; MyDialog.AnyColor = false; // Allows the us

好吧,我快被谷歌搜索出来了。我似乎犯了一个错误,在测试之前设计系统,看看它是否真的有效。基本上,我向颜色对话框提供提示,以获得用户选择的颜色。我正在使用以下代码:

ColorDialog MyDialog = new ColorDialog();

// Keeps the user from selecting a custom color.
MyDialog.AllowFullOpen = false;
MyDialog.AnyColor = false;

// Allows the user to get help. (The default is false.)
MyDialog.ShowHelp = true;
MyDialog.SolidColorOnly = true;

// Open color selection dialog box
MyDialog.ShowDialog();

functionValue = MyDialog.Color.Name;
function = "highlight";
currentFunctionValue = MyDialog.Color.Name;
if (ruleFunction[j] == "highlight")
{
    Color color = Color.FromName(ruleFunctionValues[j]);
    grdTransactions.Rows[i].Cells[index].Style.BackColor = color;
}
functionValue定义为一个字符串,它保存从数据库检索到的颜色。例如,红色。稍后,我将使用以下代码为datagrid中的一个单元格或一行单元格着色:

ColorDialog MyDialog = new ColorDialog();

// Keeps the user from selecting a custom color.
MyDialog.AllowFullOpen = false;
MyDialog.AnyColor = false;

// Allows the user to get help. (The default is false.)
MyDialog.ShowHelp = true;
MyDialog.SolidColorOnly = true;

// Open color selection dialog box
MyDialog.ShowDialog();

functionValue = MyDialog.Color.Name;
function = "highlight";
currentFunctionValue = MyDialog.Color.Name;
if (ruleFunction[j] == "highlight")
{
    Color color = Color.FromName(ruleFunctionValues[j]);
    grdTransactions.Rows[i].Cells[index].Style.BackColor = color;
}
如果颜色名称为红色、蓝色等,则可以使用此选项。但是,某些对话框选项会返回颜色的值,如ff8000和其他十六进制表示形式。我猜这会抛出Color.FromName函数,单元格不仅没有颜色,而且会将datagrid单元格中的文本弄乱。有没有办法让它显示用ff8000这样的名称选择的颜色,或者从colorDialog选择屏幕中排除这些颜色?如果我能帮忙的话,我真的不想用颜色创建我自己的自定义对话框。如果必要的话,我甚至会回去更改它在数据库中的存储方式。任何帮助都将不胜感激


谢谢

只存储返回的颜色对象,而不是存储返回的名称。然后,您可以直接分配它,而不必在字符串值之间来回切换

编辑:如果不能将其存储为颜色对象,则使用ToArgb的整数值。然后可以使用FromArgb方法加载它

Color c = Color.Red;
int redColor = c.ToArgb();

//...

this.BackColor = Color.FromArgb(redColor);

谢谢你的回复!我曾想过这样做,但不幸的是,我使用的是SQLCompact3.5Express。我可以为字段分配的唯一值如下所示。我可以使用其中一个将其存储为对象吗?bigint、二进制、位、浮点、图像、整数、货币、nchar、ntext、数字、nvarchar、real、smallint、tinyint、uniqueidentifier、varbinary、rowversion。唯一看起来很接近的是真的。这样行吗?