无法将类型为“System.Windows.Forms.Form”的对象强制转换为“Project.Form1”

时间:2011-04-25 15:55:21

标签: c# winforms forms user-controls casting

我有UserControl使用我在表单上提供的一些公共属性,在此Paint的{​​{1}}事件的顶部,我引用{{ 1}}控件并将其转换为我的表单类型。

UserControl

但是,在“设计”视图中,此代码可以正常工作,但会抛出一个错误,而我在Parent所取代的所有内容都是一个白色框,显示此帖子标题中的错误。 stacktrace直接导致这行代码。

现在,我通过在UserControl

中通过Property重新路由此强制转换来修复此错误
var _parent = (Form1)Parent;

对于那些只是打破设计视图的东西,这有点多了......还有其他想法吗?

3 个答案:

答案 0 :(得分:4)

根据代码,您的孩子Control实例可能已经处理ControlParent null。因此,最简单的解决方法是执行以下操作

public Form1 ControlParent
{
    get
    {
        return Parent as Form1;
    }
}

注意:一般来说,依赖Parent特定类型的Control是个坏主意。它可以防止它被重新托管在其他控件中,并且可以打破经常捏造类型的设计师,以提供良好的设计体验。如果您必须依赖Parent具有特定类型的值,请确保具有后备计划,该计划在不同类型的情况下不会崩溃。

答案 1 :(得分:0)

您是否在第一个代码中检查父级是否为空?

答案 2 :(得分:0)

您可以尝试设置表单的所有者,然后以您尝试通过父属性的方式访问该属性。