Unable to cast object of type 'System.Windows.Forms.Form

本文关键字:System Windows Forms Form cast to object of type Unable | 更新日期: 2023-09-27 17:52:44

我有一个UserControl,它使用了一些我在我的表单上可用的公共属性,在这个UserControlPaint事件的顶部,我引用控件的Parent并将其转换为我的表单的类型。

var _parent = (Form1)Parent;

这段代码工作,然而,在设计视图中,抛出一个错误,我所看到的UserControl的地方是一个白色的盒子,在这篇文章的标题中显示错误。堆栈跟踪直接指向这行代码。

现在,我已经修复了这个错误,通过在我的UserControl

中的属性重新路由这个转换
    public Form1 ControlParent
    {
        get
        {
            if (Parent != null)
            {
                return (Form1)Parent;
            }
            return null;
        }
    }

对于破坏Design视图的东西来说,这有点太过分了。还有其他想法吗?

Unable to cast object of type 'System.Windows.Forms.Form

基于代码,看起来您的孩子Control实例已经可以处理ControlParent成为null。因此,最简单的修复方法是执行以下命令

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

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

你检查父不是空的第一个代码吗?

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