代码之家  ›  专栏  ›  技术社区  ›  Redwood

Visual Studio没有生成代码来实例化自定义控件的实例

  •  2
  • Redwood  · 技术社区  · 17 年前

    我使用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文件,它就会再次丢失。

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

    有人知道这是什么原因吗?

    5 回复  |  直到 17 年前
        1
  •  3
  •   Peter Lacerenza Ahmed    16 年前

    我遇到了这个问题,这里的一个回复帮助我找到了这个问题,我对组件的可访问性和构造函数的可访问性都使用了“internal”关键字。正如Brent在我上面的几篇文章中提到的那样,VS designer显然无法用除公共构造函数之外的任何东西生成实例化行,因此永远不要在类可访问性和构造函数都不是“公共”的地方创建自定义用户控件

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

        2
  •  2
  •   Chris Holmes    17 年前

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

        3
  •  2
  •   Brent Miller    17 年前

    还要确保用户控件的构造函数是公共的。我对内部用户控件和VS2008 SP1 WinForms设计器代码生成有问题。它无法生成您提到的分配行。

        4
  •  0
  •   Anthony Brien    17 年前

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

    如果您已经手动编辑了Designer.cs文件,它可能会解释为什么它一直在错误地重写自己。不过,很难知道如何修复它。如果你的用户界面不太难重做,我会重做它(你的主.cs文件中的任何内容都不会被修改)。否则,您可以查看一个类似的表单,以查看其格式的模型(语句的顺序很重要)。

        5
  •  0
  •   Ender    17 年前

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