VB.NET中System.Drawing.FontFamily.GetName报‘参数无效’错误排查求助
排查DataGridView切换Tab后Font绘制异常的步骤
启用精确异常捕获定位代码行
打开Visual Studio,依次点击调试→Windows→异常设置,勾选Common Language Runtime Exceptions下的System.ArgumentException。重新运行程序,切换Tab触发错误时,调试器会直接中断在抛出异常的代码位置——哪怕是.NET框架代码,也可以通过调用栈往上回溯,找到你自己编写的、和字体/控件绘制相关的代码段。检查自定义字体的有效性
错误出自FontFamily.GetName,核心问题基本是字体引用无效:- 排查是否给tab0的DataGridView(或其单元格、列)设置了不存在的字体,比如
dgvTab0.DefaultCellStyle.Font = new Font("错误字体名", 9),要确认字体名称拼写完全正确,且当前系统已安装该字体。 - 检查是否有手动释放字体对象的代码(比如在
Dispose方法里),导致切换Tab重绘时引用了已被销毁的字体实例。
- 排查是否给tab0的DataGridView(或其单元格、列)设置了不存在的字体,比如
排查TabControl切换时的样式逻辑
TabControl默认延迟加载未显示的Tab页,切换回tab0时会触发控件重绘,可能触发了异常的字体设置逻辑:- 检查
TabControl.SelectedIndexChanged事件处理代码,看是否在切换到tab0时重复创建字体、或设置了无效的字体参数。 - 临时将tab0的DataGridView字体改为系统默认字体(
dgvTab0.DefaultCellStyle.Font = SystemFonts.DefaultFont),验证是否还会报错,快速定位是否是字体本身的问题。
- 检查
排除DataTable自动样式干扰
虽然绑定逻辑相同,但tab0的DataTable可能存在特殊数据导致控件自动生成了错误样式:- 对比三个Tab的DataTable结构和数据,看tab0是否包含带格式标记的单元格数据(比如数据库中存储了字体相关的元数据,被控件自动解析应用)。
- 尝试给tab0的DataGridView设置
AutoGenerateColumns = false,手动定义列和样式,排除自动生成样式带来的异常。
内容的提问来源于stack exchange,提问作者Basajaun
相关产品推荐
相关产品推荐

