从颜色对话框中禁用颜色

disable a color from color dialog

我想允许用户使用 ColorDialog 为我的程序选择背景颜色,但由于我的标签文本是黑色的,我想让用户无法从颜色对话框中选择黑色这样颜色就不会与我的标签文字颜色重叠。有什么办法可以做到吗?我还考虑过如果用户选择黑色如下所示显示一条错误消息,但在颜色对话框再次出现后,我选择的颜色不会成为我表单的 BackColor

if (color.ShowDialog() == DialogResult.OK)
{
    if(color.Color == Color.Black)
    {
        MessageBox.Show("Color cannot be black", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        color.ShowDialog();
    }
    else
    {
        BackColor = color.Color;
        backColor = color.Color;
    }
}

尝试在检查颜色时使用 while 而不是 if:

if (color.ShowDialog() == DialogResult.OK)
{
    while(color.Color == Color.Black)
    {
        MessageBox.Show("Color cannot be black", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        color.ShowDialog();
    }
    BackColor = color.Color;
    backColor = color.Color;
}

这样,除非您选择的颜色不是黑色,否则它将显示一条错误消息并再次打开 ColorDialog。 至于为什么在你重新打开对话框后颜色不会为你改变,这是因为你只是在 else 子句中改变背景颜色,因此如果你一开始选择黑色,BackColor 不会改变。 另一种解决问题的方法是,如果选择的颜色是黑色,则将标签的颜色更改为白色(选择另一种颜色时,不要忘记将标签文本改回黑色)。