C# Visual Studio不是';t生成实例化自定义控件实例的代码

C# Visual Studio不是';t生成实例化自定义控件实例的代码,c#,winforms,visual-studio-2008,.net-3.5,C#,Winforms,Visual Studio 2008,.net 3.5,我使用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

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

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


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

您是否以任何方式调整了自定义控件的构造函数?控件的默认构造函数是无参数的,我知道我过去在为需要参数的控件创建构造函数时遇到过麻烦。在这些情况下,我总是提供两个构造函数。这样,VS中的设计模式将保留无参数的构造函数,同时确保用户控件的构造函数是公共的。我在内部用户控件和VS2008 SP1 WinForms designer代码生成方面遇到了问题。它无法像您提到的那样生成分配行。

即使.Designer.cs文件看起来像简单的代码,但在该代码中玩游戏是非常危险的,因为它很容易破坏Windows窗体设计器。我听说很多人放弃WinForms designer,因为他们说它不起作用。它确实很容易被破坏,但是如果你不尝试在.Designer.cs文件中玩,它就像一个魔咒


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

您是否有Visual Studio 2008的最新service pack?这通常发生在您没有最新的service pack时。

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


顺便说一句,这件事发生在我的VisualStudio2005上,它也会发生在VisualStudio2008上,这并不奇怪。这很可能发生在VS的早期版本上。

天哪,这位设计师真是太蠢了。谢谢你的指点!这也发生在VS2010上。微软显然从未在使用内部关键字的程序集上使用过它作为狗食。迷人的。