类型'Track_Attack.TAGeneric'上找不到构造函数。C# Winforms

4
我在Visual Studio 2010中收到了一个警告消息(如标题所示)。
基本上,我制作了一个通用表格,其中包含一堆变量和虚函数。
它需要一个我创建的类作为参数,并将其分配给一个本地变量(然后使用getter和setter将其作为属性放置)。
然后我又制作了另一个表格,它继承自这个表格。一切都很好,它可以运行,但当我尝试查看它的设计时,我会收到那个错误消息。
    public TAGeneric(TAManager iManager)
    {
        ControlHelper.SuspendDrawing(this);

        mManager = iManager;

        SetStyle(ControlStyles.OptimizedDoubleBuffer |
            ControlStyles.UserPaint |
            ControlStyles.AllPaintingInWmPaint, true);

        InitializeComponent();
        SetupCommandBar();
        ControlHelper.ResumeDrawing(this);
    }

这是父元素。

    public TAAddInterval(TAManager iManager) : base(iManager)
    {
        InitializeComponent();
    }

这是一个子类。不要在意我使用了“manager”(管理器)这个词,虽然有些人不太喜欢。有谁能解决这个问题吗?代码可以正常运行,但是当我试图在设计师中编辑图形界面时,它就无法加载。

感谢您的帮助。


与您的问题无关,我建议您将类中的“Generic”更改为其他名称,因为在 .Net 中 Generic 实际上代表了一些含义。 - Brad Rem
找到微软支持:https://support.microsoft.com/zh-cn/kb/893709 - Junle Li
2个回答

8
我猜你需要提供一个无参数的构造函数供设计师使用:
public TAAddInterval(TAManager iManager) : base(iManager)
{
    InitializeComponent();
}

[Obsolete("This constructor only exists for the benefit of the designer...")]
public TAAddInterval() : this(null)
{
}

如果你有某种假的TAManager可以提供,那么在设计师恰好使用该管理器的一些代码时可能避免抛出NullReferenceException


说出了我心里的话!Jon Skeet 的回答加一! - Mike Perrenoud
那我在我的子表单中加入第二个构造函数,同时保留原始的构造函数? - ICTech
@Jon Skeet:我尝试了您提供的代码,但它仍然给出相同的消息:( - ICTech
@ICTech:根据你所展示的错误信息,它似乎是关于父级的问题。 - Jon Skeet
1
修复了!感谢帮助,问题出在父组件和我手动绘制的某个自定义组件上,它们表现出一些奇怪的行为。我在父类中添加了一个空构造函数,这似乎解决了问题。 - ICTech
显示剩余2条评论

2
您可能只需要一个无参数的构造函数,设计师就能正常工作。

在我的父级或子级?还是两者都有? - ICTech
1
嗯,对于设计师的工作来说,每个表单都需要一个无参构造函数。即使该构造函数只是从它的基类继承而来。如果你将@JonSkeet的示例再往下一级实现,你可以实现一个无参构造函数,然后再从基类(任意一个构造函数)继承。 - Mike Perrenoud

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接