我有一个包含如下字体信息的文本文件:
Arial,12.5
...我需要将这些信息读入label.Font就像这样:
label.Font = new Font(fontNameFields [0],Single.Parse(fontNameFields [1]));
...但我总是收到以下错误:
索引超出了数组的范围。
有人可以帮帮我吗?
由于 杰森。
我的代码:
MatchCollection lines = Regex.Matches(File.ReadAllText(Path), @"(.+?)\r\n""([^""]+)""\r\n(\d+), (\d+)");
foreach (Match match in lines)
{
string control = match.Groups[1].Value;
string text = match.Groups[2].Value;
int x = Int32.Parse(match.Groups[3].Value);
int y = Int32.Parse(match.Groups[4].Value);
String cfont = match.Groups[5].Value;
String fontName = cfont;
String[] fontNameFields = fontName.Split(',');
label.Font = new Font(fontNameFields[0], Single.Parse(fontNameFields[1]));
}
堆栈跟踪
at Tabbed.Form1.FillCanvas() in C:\Documents and Settings\jay\My Documents\Visual Studio 2008\Projects\MYPROGGY\ MYPROGGY\Form1.cs:line 574
at Tabbed.Form1.openbtn_Click(Object sender, EventArgs e) in C:\Documents and Settings\jay\My Documents\Visual Studio 2008\Projects\ MYPROGGY\ MYPROGGY\Form1.cs:line 802
at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
at System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ToolStrip.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at Tabbed.Program.Main(String[] args) in C:\Documents and Settings\jay\My Documents\Visual Studio 2008\Projects\ MYPROGGY\ MYPROGGY\Program.cs:line 27
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
答案 0 :(得分:2)
我怀疑你遇到了一行不包含逗号的行。您的示例数据可以正常工作:
using System;
class Test
{
static void Main(string[] args)
{
String fontName = "Arial, 12.5";
String[] fontNameFields = fontName.Split(',');
String name = fontNameFields[0];
float size = float.Parse(fontNameFields[1]);
Console.WriteLine("{0}: {1}", name, size);
}
}
在您尝试创建字体之前记录(或在对话框中弹出)fontName
,我确信它会告诉您发生了什么。
答案 1 :(得分:1)
乍一看,代码看起来还不错。
您是否检查过fontName
是否符合预期(即“Arial,12.5”)以及调用fontNameFields
后fontName.Split
包含的内容?
fontNameFields[0] -> "Arial"
fontNameFields[1] -> "12.5"
如果没有看到实际值,我不想提出任何其他建议。
修改强>
从你更新的代码我建议你的正则表达式失败了。尝试打印出match.Groups
数组的内容,以检查您是否正确解析输入。
答案 2 :(得分:1)
你的格式是否包含一个奇怪的逗号,或者根本没有?
你也可以在标签上提供代码,好像它是System.Web.UI.WebControls
,然后Font没有设置器。
上面的Skeet代码适用于给定的输入。你的问题在别处。