2009-11-12 63 views
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

Value does not fall within the expected

然后我有两个问题:

  • 我该如何解决这个问题?
  • 如何使用浮点数来代替TextSize而不是Font方法中的浮点数?

谢谢。

回答

1

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

你可以试试这个为TEXTSIZE:

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

处理的文字样式可能会有点麻烦,因为你必须要比较不同的枚举值的字符串值。例如,要检测“粗体”样式,您可以编写:

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

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

+0

谢谢你回答我的第二个问题李。 – 2009-11-12 21:00:43

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; 
    } 
} 
+0

谢谢Jon Skeet,你是​​那个人! – 2009-11-12 21:00:13

1

乔恩斯基特已经回答了你的第一个问题,所以你的第二个(如何解析的字体大小为float):

float.Parse(s, CultureInfo.InvariantCulture); 

s是STRI ng包含字体大小。

+0

感谢回答我的第二个问题Brian。 – 2009-11-12 21:01:14