【问题标题】:Constructor on type 'Track_Attack.TAGeneric' not found. C# Winforms找不到类型“Track_Attack.TAGeneric”的构造函数。 C# Winforms
【发布时间】:2012-09-10 18:04:04
【问题描述】:

我在 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();
    }

这是一个孩子。忘记我正在使用“经理”这一事实,当它被皱眉时。有人对这个问题有所了解吗?从字面上看运行良好,但是当试图在设计器中编辑图形端时,它不会加载它。

感谢您的帮助。

【问题讨论】:

标签: c# winforms visual-studio-2010


【解决方案1】:

我怀疑你需要提供一个无参数的构造函数供设计者使用:

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 的回答 +1!
  • 所以我在我的子表单中添加了第二个构造函数和原始的?
  • @Jon Skeet:我试过你提供的代码,但它仍然给我同样的信息:(
  • @ICTech:您确定您是在尝试将 child 类添加到设计器,而不是父类?
  • 修复了!感谢您的帮助,这是我手动绘制的自定义组件之一的父级和一些奇怪的行为。我在父类中添加了一个空的构造函数,这似乎解决了。
【解决方案2】:

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

【讨论】:

  • 在我的父母或孩子身上?还是两者兼而有之?
  • 好吧,为了让设计者工作,每个表单都需要有一个无参数的构造函数。即使该构造函数只是从它的基础继承。如果您将@JonSkeet 示例向下一层,您可以实现一个无参数构造函数,然后从基类(任一构造函数)继承。
猜你喜欢
  • 1970-01-01
  • 2010-12-12
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
相关资源
最近更新 更多