在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并且仍然遇到此问题,我该如何纠正这个问题?
重现问题的步骤:
非常感谢任何帮助!
答案 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
}