解析字体信息并将其转换为System.Drawing.Font

我有一个文本文件,其中包含如下字体信息:

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() 

我怀疑你遇到了一行不包含逗号的行。 您的示例数据可以正常工作:

 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 ,我确信它会告诉你发生了什么。

可能是你的格式包含一个奇怪的逗号,或者根本没有?

你也可以在标签上提供代码,好像它是一个System.Web.UI.WebControls然后Font没有一个setter。

上面的Skeet代码适用于给定的输入。 你的问题在别处。

乍一看,代码看起来还不错。

您是否检查过fontName是否符合预期(即“Arial,12.5”)以及调用fontName.SplitfontNameFields包含的内容?

 fontNameFields[0] -> "Arial" fontNameFields[1] -> "12.5" 

没有看到实际值,我不想提出任何其他建议。

编辑

从你更新的代码我建议你的正则表达式失败了。 尝试打印出match.Groups数组的内容,以检查您是否正确解析输入。