SplitContainer ISupportInitialize问题:VS2010针对.NET 3.5

时间:2011-05-09 21:09:43

标签: .net winforms exception splitcontainer

在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(properties-> Applications-> Target Framework:)
  5. 重新运行应用程序(它会因Cast异常而崩溃)。
  6. 非常感谢任何帮助!

3 个答案:

答案 0 :(得分:30)

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

答案 1 :(得分:6)

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

  

SplitContainer.BeginInit

     

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

点击here了解有关此方法的详情。

答案 2 :(得分:1)

这是一篇很老的帖子,但我不喜欢每次都要编辑设计器文件,为错误留下太多空间。

我只是将控件子类化,并使用预处理器指令实现.net 3.5构建的接口,如下所示。

在2017年找到解决方案时,只需添加我的方法就可以了。

    /// <summary>
    /// Split Container Control
    /// </summary>
    public class SplitContainer : System.Windows.Forms.SplitContainer

#if (NET35)
        , ISupportInitialize
#endif

    {
        #region Constructor

        /// <summary>
        /// Constructor
        /// </summary>
        public SplitContainer() : base() { }

        #endregion Constructor

        #region ISupportInitialize Methods

#if (NET35)

        public void BeginInit() { }

        public void EndInit() { }

#endif

        #endregion ISupportInitialize Methods
    }