0

16 進数値から色を取得しようとすると、ArgumentOutOfRangeException が発生します。

   public static SolidColorBrush GetColorFromHexa(string hexaColor)
    {
        return new SolidColorBrush(
            Color.FromArgb(
                Convert.ToByte(hexaColor.Substring(1, 2), 16),
                Convert.ToByte(hexaColor.Substring(3, 2), 16),
                Convert.ToByte(hexaColor.Substring(5, 2), 16),
                Convert.ToByte(hexaColor.Substring(7, 2), 16)
            )
        );
    }


  SolidColorBrush brush = GetColorFromHexa("#ADD8E6");
  border.Background = brush;

この問題の原因となる可能性のあるものを見逃していますか?

4

2 に答える 2

2

パラメータ #ADD8E6 に色コンポーネントの 1 つが欠けているようです。AD D8 E6 は 3 つのコンポーネントにすぎませんが、ARGB には 4 つのコンポーネントが必要です。4番目はどこですか?そのため、Convert.ToByte(hexaColor.Substring(7, 2), 16) 行で例外がスローされます。

于 2012-09-24T10:29:33.933 に答える
1

ArgumentOutOfRangeException -
startIndex plus length indicates a position not within this instance.

-or-

startIndex or length is less than zero -msdn

これが問題の原因です。つまり、値 (最後の値は 7,2) が範囲外です。

MSDN の String.Substring メソッドに役立ついくつかの例

お役に立てば幸いです。幸運を祈ります。

于 2012-09-24T10:27:46.913 に答える