价值不落在预期之内

时间:2009-11-12 20:38:01

标签: c# exception file-io windows-mobile-5.0

我正在构建一个使用文件配置某些字体的应用程序。就像这样:

Font = Verdana
Size = 12
Style = Bold

我的代码是这样的:

openDialog.ShowDialog();
string file = openDialog.FileName;
StreamReader reader = new StreamReader(file);
while (reader.Peek() <= 0)
{
    string line = reader.ReadLine();
    string[] data = Split(new[] { '=' });
    // property is in data[0]
    // value is in data[1]
    TextFont = data[1];
    TextSize = data[3];
    TextSt = data[5];
}
reader.Close();
reader.Dispose();

并像这样使用它:

textBox1.Font = new System.Drawing.Font(TextFont, 12F, FontStyle.Bold);

但是当我执行它时,我收到了这个错误:

  

的ArgumentException

     

价值不在预期范围内

然后我有两个问题:

  • 我该如何解决这个问题?
  • 我如何使用TextSize代替字符串使用浮点数在Font方法中实现它?

感谢。

3 个答案:

答案 0 :(得分:1)

您正在阅读一行,但之后尝试从中获取三个值。看看评论:

// property is in data[0]
// value is in data[1]

然后您使用数据[1],数据[3]和数据[5] ......

您可能需要以下内容:

openDialog.ShowDialog();
string file = openDialog.FileName;
string[] lines = File.ReadAllLines(file);
foreach (string line in line)
{
    string[] data = line.Split('=');
    string property = data[0].Trim();
    string value = data[1].Trim();
    switch (property)
    {
        case "Font": TextFont = value; break;
        case "Size": TextSize = value; break;
        case "Style": TextSt = value; break;
        default:
          // Whatever you want to do here for properties you don't recognise
          break;
    }
}

答案 1 :(得分:1)

Jon Skeet已经回答了你的第一个问题,所以对于你的第二个问题(如何将字体大小解析为浮点数):

float.Parse(s, CultureInfo.InvariantCulture);

其中s是包含字体大小的字符串。

答案 2 :(得分:1)

您可能还有数据转换问题:Split()方法返回一个字符串数组,但TextSize是一个float,而TextStyle是一个枚举(FontStyle)。虽然我们作为人类可以很容易地说出数字12和字符串“12”至少是相关的,但编译器却更加挑剔。

您可以尝试使用TextSize:

float fSize;
if (float.TryParse(data[3], out fSize))
    TextSize = fSize;

处理TextStyle可能有点棘手,因为您必须将字符串值与不同的枚举值进行比较。例如,要检测“粗体”样式,您可以写:

if (String.Compare("Bold", data[5]) == 0)  // true if equal
    TextStyle = FontStyle.Bold;

干杯!     谦虚的程序员     ,,, ^ .. ^ ,,,