You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Form中添加Month Calendar触发System.ArgumentException的解决方法

修复.NET Framework WinForms中MonthCalendar控件引发的IAccessibleArgumentException异常

问题场景确认

使用Visual Studio 2019创建基于.NET Framework 4.6.1/4.7.2的Windows Forms项目,添加MonthCalendar控件后,当调试器设置为中断所有异常时,程序运行到Application.Run(new Form1());会反复抛出System.ArgumentException(错误提示:Value does not fall within the expected range)。异常调用栈指向System.Windows.Forms.dll!System.Windows.Forms.AccessibleObject.Accessibility.IAccessible.get_accChild(object ChildID),常规try/catch无法阻止调试器中断。

可行修复方案

1. 精准调整调试器异常过滤规则

打开Visual Studio的调试 → Windows → 异常设置(快捷键Ctrl+Alt+E):

  • 展开Common Language Runtime Exceptions → System节点
  • 找到System.ArgumentException,取消勾选抛出列的复选框(仅保留用户未处理的勾选)
  • 如需更精细控制,右键点击System.ArgumentException选择「编辑条件」,添加模块过滤规则,仅排除来自System.Windows.Forms.dll的该异常,避免影响其他场景的异常捕获。

2. 禁用MonthCalendar控件的辅助功能

在Form构造函数中初始化控件后,禁用其辅助功能相关属性:

public Form1()
{
    InitializeComponent();
    monthCalendar1.AccessibleRole = AccessibleRole.None;
    monthCalendar1.AccessibleName = string.Empty;
}

也可以直接在设计视图中修改MonthCalendar控件的AccessibleRole为None,AccessibleName设为空字符串,效果一致。

3. 升级至.NET Framework 4.8及以上版本

该异常是.NET Framework 4.7.2及以下版本中WinForms辅助功能模块的已知问题,升级到.NET Framework 4.8后官方已修复该bug:

  • 右键项目 → 属性 → 应用程序 → 目标框架选择.NET Framework 4.8
  • 重新编译运行后,异常会自动消失。

4. 启用编译优化

部分场景下,开启代码优化可让JIT编译器跳过引发异常的无效辅助功能调用:

  • 右键项目 → 属性 → 生成 → 点击「高级」按钮
  • 勾选优化代码选项,重新编译调试。

内容的提问来源于stack exchange,提问作者J. Mini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:22:24