SplitContainer ISupportInitialize问题:VS2010针对.NET 3.5

Aus*_*tin 24 .net exception splitcontainer winforms

在VS2010中,我有一个针对.NET Framework 4.0的项目,然后必须恢复到目标v.3.5.一旦发生这种情况,我所拥有的SplitContainer对象将无法显示并实际抛出错误:"无法将类型为'System.Windows.Forms.SplitContainer'的对象强制转换为'System.ComponentModel.ISupportInitialize'."

现在,我做了一些挖掘,发现3.5实际上并没有在SplitContainer上使用ISupportInitialize,而是在.NET 4.0中.我想我的问题是,如果我的目标是3.5并且仍然遇到此问题,我该如何更正?

重现问题的步骤:

  1. 在Visual Studio 2010中创建一个新的C#Windows窗体应用程序项目(确保以.NET Framework 4.0为目标)
  2. 将拆分容器添加到基本表单.
  3. 运行应用程序(将运行正常)
  4. 将目标更改为.NET Framework 3.5(属性 - >应用程序 - >目标框架:)
  5. 重新运行应用程序(它会因Cast异常而崩溃).

任何有关这方面的帮助将不胜感激!

Aus*_*tin 30

我找到了这个问题的解决方案,它非常特别......如果你将表单备份到3.5,你必须在程序中的每个和每个表单上进行一些小的更改,以便编译器重新生成所有代码对于那种形式.我遇到问题的原因是因为我没有做任何更改并且正在尝试运行尚未重新生成的代码.

  • 按照原始帖子中的步骤操作,然后尝试运行它.它会失败.然后你可以做的只是在表单中添加一个Button.删除新添加的按钮,然后重新运行该应用程序.中提琴!该应用程序工作!这是因为在您通过添加或删除组件来修改表单之前,应用程序尚未重新生成表单数据.那时Visual Studio将完全重新生成该表单的代码以符合Framework 3.5的要求.只是生气,他们不会自动这样做,当你backrev ...会使我的工作更容易> < (6认同)
  • 作为@sw.写道,它足以找到和删除像`((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();` (3认同)
  • 您刚刚在组件初始化时注释了BeginInit()和EndInit()?谢谢 (2认同)
  • 这实际上帮助我使用Visual Studio 2012.打开Designer,向左移动一个组件1px,然后向右移动1px,保存并运行.Upvoted! (2认同)

小智 6

正如@tomash提到的那样,删除该特定控件上的BeginInit()和EndInit()行就足够了.

SplitContainer.BeginInit

.NET Framework受以下版本支持:4.5,4

单击此处获取有关此方法的更多信息.