1

当表单加载时会发生这种情况,它会根据用户设置设置文本框的背景色。

这是我设置颜色的时候:

Main_Box.BackColor = Color.FromArgb(Properties.Settings.Default.TCP_BackgroundR, Properties.Settings.Default.TCP_BackgroundG, Properties.Settings.Default.TCP_BackgroundB);

这是我保存颜色的时间:

byte
    gBackgroundR, gBackgroundG, gBackgroundB;

// Color dialog
gBackgroundR = CD_BG.Color.R;
gBackgroundG = CD_BG.Color.G;
gBackgroundB = CD_BG.Color.B;

Properties.Settings.Default.TCP_BackgroundR = gBackgroundR;
Properties.Settings.Default.TCP_BackgroundG = gBackgroundG;
Properties.Settings.Default.TCP_BackgroundB = gBackgroundB;

--

当我写这篇文章时,我试图复制这个问题,但不能......它几乎就像第一次错误一样......但为了安全起见:我发布的代码是保存/加载的正确方法吗颜色并设置它们?

4

1 回答 1

3

您可能已经在属性文件中为您的颜色手写了一个值为 256 的值。一旦您从程序内部保存了设置(或更改了在文件中手写的内容),它就会用有效值覆盖它,这就是错误不再发生的原因。

至于原来的问题:有效范围是0-255,所以当你传入值256时,它会出错。配置文件中的无效数据是您需要在代码中查找和处理的内容。

//Method 1 fix by setting a default value.
try
{
    Main_Box.BackColor = Color.FromArgb(Properties.Settings.Default.TCP_BackgroundR, Properties.Settings.Default.TCP_BackgroundG, Properties.Settings.Default.TCP_BackgroundB);
}
catch (ArgumentException)
{
    //If a invalid color was read in from the config file use white instead
    Main_Box.BackColor = Color.White;
}

//Method 2 fix by clamping values.
int red = Math.Min(Math.Max(Properties.Settings.Default.TCP_BackgroundR, 0), 255);
int green = Math.Min(Math.Max(Properties.Settings.Default.TCP_BackgroundG, 0), 255);
int blue = Math.Min(Math.Max(Properties.Settings.Default.TCP_BackgroundB, 0), 255);
Main_Box.BackColor = Color.FromArgb(red, green, blue);

此外,您的 Properties 文件使用字节来存储数字,但FromArgb在有限范围内采用 int。我建议匹配 FromArgb 接受的内容(一个 int)并在你的属性文件中使用它。

于 2013-03-18T20:54:56.743 回答