【问题标题】:Using ColorDialog to set colors in datagrid使用 ColorDialog 在数据网格中设置颜色
【发布时间】:2013-05-01 01:09:57
【问题描述】:

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

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 选择屏幕中排除这些颜色?如果可以的话,我真的不想用颜色创建自己的自定义对话框。如有必要,我什至会回去更改它在数据库中的存储方式。任何帮助将不胜感激!

谢谢!

【问题讨论】:

    标签: c# colors dialog


    【解决方案1】:

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

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

    Color c = Color.Red;
    int redColor = c.ToArgb();
    
    //...
    
    this.BackColor = Color.FromArgb(redColor);
    

    【讨论】:

    • 感谢您的回复!我曾想过做类似的事情,但不幸的是我使用的是 SQL compact 3.5 express。我可以分配字段的唯一值如下。我可以使用其中一个将其存储为对象吗? bigint、二进制、位、浮点数、图像、int、money、nchar、ntext、数字、nvarchar、real、smallint、tinyint、uniqueidentifier、varbinary、rowversion。唯一看起来接近的是“真实的”。这行得通吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 2020-03-14
    • 2016-02-18
    • 1970-01-01
    • 2010-10-19
    相关资源
    最近更新 更多