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);

また、プロパティファイルはバイトを使用して数値を格納していますがFromArgb、制限された範囲内で int を使用しています。FromArgb が取り込むもの (int) を一致させ、それをプロパティ ファイルで使用することをお勧めします。

于 2013-03-18T20:54:56.743 に答える