【问题标题】:Visual Studio isn't generating code to instantiate instance of custom controlVisual Studio 不生成代码来实例化自定义控件的实例
【发布时间】:2010-10-06 19:24:57
【问题描述】:

我使用 C#、.Net3.5 和 Visual Studio 2008 创建了一个自定义控件。

然后我将该控件从工具箱中拖动到另一个控件中。

执行此操作后,当我尝试编译时,出现如下错误:

Error   1   Warning as Error: Field 'MyNamespace.MyControl._myCustomControl' is never assigned to, and will always have its default value null

查看 Designer.cs 文件,这是因为 VS 从不生成以下代码:

this._rgReportGallery = new MyNameSpace.MyCustomControl();

字段本身就在那里,并且将其添加到我要放入的控件中的代码,只是缺少实例化代码。

我可以手动添加该代码,一切似乎都正常,但是一旦重新生成了 Designer.cs 文件,它就会再次丢失。

我什至成功地添加了一个不同的自定义控件并生成了该代码。

有人知道是什么原因造成的吗?

【问题讨论】:

    标签: c# winforms visual-studio-2008 .net-3.5


    【解决方案1】:

    我遇到了这个问题,这里的回复帮助我找到了问题,我对组件可访问性和构造函数可访问性都使用了“内部”关键字。正如布伦特在我上面的几篇文章中提到的那样,VS 设计器显然在生成实例化行时遇到了问题,除了公共构造函数之外的任何东西,所以永远不要在类可访问性和构造函数不是“公共”的情况下制作自定义用户控件。

    顺便说一句,这发生在我的 Visual Studio 2005 上,我并不惊讶它也会发生在 Visual Studio 2008 上。它也可能发生在早期版本的 VS 上。

    【讨论】:

    • 天哪,这位设计师真是太愚蠢了。谢谢指点!它也发生在 VS 2010 上。微软显然从未在使用内部关键字的程序集上将其用作狗粮。令人着迷。
    【解决方案2】:

    您是否以任何方式调整了自定义控件的构造函数?控件的默认构造函数是无参数的,我知道过去在为需要参数的控件创建构造函数时遇到了麻烦。在这些情况下,我总是提供两个构造函数。这样,VS 中的设计模式就保留了无参数。

    【讨论】:

      【解决方案3】:

      还要确保您的 UserControl 的构造函数是公开的。我在内部 UserControls 和 VS2008 SP1 WinForms 设计器代码生成方面遇到了问题。它未能像您提到的那样生成分配行。

      【讨论】:

        【解决方案4】:

        尽管 .Designer.cs 文件看起来像简单的代码,但在该代码中玩弄是非常危险的,因为它很容易破坏 Windows 窗体设计器。我听说很多人只是放弃了 WinForms 设计器,因为他们说它不起作用。它确实很容易破解,但如果你不尝试在 .Designer.cs 文件中播放,它就像一个魅力。

        如果您手动编辑了 Designer.cs 文件,它可能会解释为什么它不断地自我重写错误。很难知道如何解决它。如果您的 UI 不太难重做,我会重做它(无论您的主 .cs 文件中的什么内容都将保持不变)。否则,您可以查看一个类似的表格来了解它应该如何格式化(语句的顺序很重要)。

        【讨论】:

          【解决方案5】:

          您有 Visual Studio 2008 的最新服务包吗?当您没有最新的服务包时,通常会发生这种情况。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-01-07
            • 2016-09-25
            • 1970-01-01
            • 1970-01-01
            • 2013-05-16
            • 1970-01-01
            • 1970-01-01
            • 2015-11-09
            相关资源
            最近更新 更多