1

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

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;

functionValue 被定义为一个字符串,它保存从数据库中检索到的颜色。例如,“红色”。稍后,我使用以下代码为数据网格中的一个单元格或一行单元格着色:

if (ruleFunction[j] == "highlight")
{
    Color color = Color.FromName(ruleFunctionValues[j]);
    grdTransactions.Rows[i].Cells[index].Style.BackColor = color;
}

如果颜色名称是“红色”、“蓝色”等,这可以正常工作。但是,某些对话框选项会返回诸如“ff8000”之类的值和颜色的其他十六进制表示。我猜这会抛出 Color.FromName 函数,并且单元格不仅没有颜色,而且在数据网格单元格中弄乱了文本。有没有办法让它显示以“ff8000”之类的名称选择的颜色,或者从 colorDialog 选择屏幕中排除这些颜色?如果可以的话,我真的不想用颜色创建自己的自定义对话框。如有必要,我什至会回去更改它在数据库中的存储方式。任何帮助,将不胜感激!

谢谢!

4

1 回答 1

0

与其存储返回的名称,不如存储返回的颜色对象。然后,您可以直接分配它,而不是往返于字符串值。

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

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

//...

this.BackColor = Color.FromArgb(redColor);
于 2012-06-08T00:56:07.920 回答