我正在构建一个使用文件配置某些字体的应用程序。就像这样:
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
方法中实现它?感谢。
答案 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;
干杯! 谦虚的程序员 ,,, ^ .. ^ ,,,