C# 值不为';I don’我不在预期范围之内
我正在构建一个应用程序,它使用一个文件来配置一些字体。是这样的:C# 值不为';I don’我不在预期范围之内,c#,exception,file-io,windows-mobile-5.0,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();
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);
我的代码是这样的:
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);
但当我执行它时,我得到了一个错误:
论据例外
值不在预期范围内
那么我有两个问题:
- 我怎样才能解决这个问题
- 如何在
方法中使用浮点数来实现它,而不是Font
的字符串TextSize
谢谢。您正在阅读一行,但试图从中获取三个值。请看评论:
// 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;
}
}
你在读一行,然后试着从中取三个值。请看评论:
// 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;
}
}
Jon Skeet已经回答了您的第一个问题,因此对于您的第二个问题(如何将字体大小解析为浮点):
其中s是包含字体大小的字符串。Jon Skeet已经回答了您的第一个问题,因此对于您的第二个问题(如何将字体大小解析为浮点):
其中s是包含字体大小的字符串。您可能还存在数据转换问题:Split()方法返回字符串数组,但TextSize是一个浮点,而TextStyle是一个枚举(FontStyle)。虽然我们人类可以很容易地分辨出数字12和字符串“12”至少是相关的,但编译器要挑剔得多 对于文本大小,您可以尝试以下方法:
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;
干杯!
卑微的程序员
,,,,,,,,,您可能还存在数据转换问题:Split()方法返回字符串数组,但TextSize是一个浮点,而TextStyle是一个枚举(FontStyle)。虽然我们人类可以很容易地分辨出数字12和字符串“12”至少是相关的,但编译器要挑剔得多 对于文本大小,您可以尝试以下方法:
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;
干杯!
卑微的程序员
,,,,^…^