winform 位置不空 隐藏控件_winforms – 为什么WinForm Designer显示消息“值不能为空.参数名称:上下文“?...

我有一个c#

Windows窗体应用程序,使用.NET 3.5.

我的机器环境如下:

> Visual Studio 2010 Premium,SP1

> Windows 7 Professional,SP1

> 32位处理器

我有一个UserControl导出的自定义控件,其中包含一些其他UserControls.

我在Visual Studio的Windows窗体设计器中调出主要的UserControl,然后我开始点击各种嵌入式的UserControls,并随机更改一些属性,如文本.然后单击保存工具栏按钮.然后我继续对控件的属性进行更多更改,然后单击保存.

在一段时间之后(这不可预测),Visual Studio将显示一个错误对话框.

WinForms设计器显示一个带有“Microsoft Visual Studio”标题的模态对话框,并显示了一个两行消息:“值不能为空”参数名称:上下文“和”确定“按钮.

不幸的是,通过单击确定按钮关闭此对话框后,Visual Studio现在已经损坏了我的Form的设计者生成的代码.恢复代码的唯一方法是备份文件.

我发现唯一的解决方法是将属性窗口中的UserControl设置为false.这不是长期的解决方法,因为我需要这个UserControl可以在我们的生产代码中进行本地化.

我的项目相当简单,没有Web服务等

我尝试使用Visual Studio的另一个实例调试,看看是否可以捕获任何异常,但不会生成异常.没有任何重要的调试输出.

有没有人看到这个问题?寻找建议

更多信息…

我能够成功附加Visual Studio的第二个实例,并确定正在抛出异常. (我不得不取消选中“我的代码”调试选项,启用符号服务器等).

显然,当我单击WinForm设计器中的保存时,System.ArgumentNullException异常发生在System.dll中,方法System.ComponentModel.Design.Serialization.ContextStack.Push(对象上下文)中.所以,context参数是null,这是问题.仍然不知道为什么会发生这种情况.

这是堆栈跟踪:

System.dll!System.ComponentModel.Design.Serialization.ContextStack.Push(object context) + 0x88 bytes

System.Design.dll!System.ComponentModel.Design.Serialization.ResourceCodeDomSerializer.ApplyCacheEntry(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, System.ComponentModel.Design.Serialization.ComponentCache.Entry entry) + 0x10e bytes

System.Design.dll!System.ComponentModel.Design.Serialization.ComponentCodeDomSerializer.Serialize(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, object value = {ReveilleSystem.UserInterface.BoldLabel}) + 0xf64 bytes

System.Design.dll!System.Windows.Forms.Design.ControlCodeDomSerializer.Serialize(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, object value = {ReveilleSystem.UserInterface.BoldLabel}) + 0x83 bytes

System.Design.dll!System.ComponentModel.Design.Serialization.CodeDomSerializerBase.SerializeToExpression(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, object value = {ReveilleSystem.UserInterface.BoldLabel}) + 0x173 bytes

System.Design.dll!System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Serialize(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, obj

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值