got error The variable <variable name> is either undeclared or was never assigned
我使用Visual Studio 2008在WinForms C中实现了一个大表单。在对话框的很大一部分正常工作之后,当我试图打开设计器时,它开始显示标题中的许多错误massege。
"The variable is either undeclared or was never assigned"
我得到了很多以前很好的控制。我认为它发生在我使用的自定义控件中
第一推荐使用任何复杂的逻辑是do not in the form构造函数,but the s Load事件中的组织(或overrides of the onLoad方法)。P></
设计师uses the the to the构造函数代码的形式显示,如果你有你的form errors"undisplayable will be the VS设计师"。P></
每一个问题时,你secondly,设计师在the Close,EN和重建你的组织的项目。verify the errors & the error WARNINGS在列表窗口。后固定它,在你的desig reopen形态模式。P></
解决方案:在工作中发现的P></
当我初发生的问题the custom and the Controls对话框的DLL是在the same /项目/组合。P></
在Windows的DLL separated created the for custom控制在控制和…the the对话框给设计师。P></
我已经看见the same问题,我认为它是错误的。现在在和我(我不认为of the精确,即使在特殊)创造完全新的形态和空和控制单增的原因设计师Will the custom to describe the Way You中炸毁。pasting Copying & the Code for the New Empty品牌进入自定义控制项目和增it to the New form,不会出现问题。P></
设计师不只是茶茶行近顶端产生的
1 |
事实上,如果insert the above manually en is when the在线项目rebuilt is removed。P></
在我回来以前项目看,能看到the present错误是在VS2005和今天仍然在vs2010中得到它。我peppered with previous代码位是这样:P></
1 2 3 4 5 6 | public MyForm() { // HACK: work around VS bug this.customControl1 = new Controls.CustomControl(); InitializeComponent(); } |
needless说,the most of the time的设计师的作品。我consistently not found the Way of any reproducing除尘问题,but from the solution interestingly在形态和recreating one with the same name is the +自定义的控制,仍然有问题。P></
这也occurred error for one of forms和我们有我们的时间真的是很难的故障是常见的。其实我在the形态.cs 3X队列文件。基于form.cs茶,茶是designer.cs and the form(EN是扩展部分declared as a class)。P></
我知道myform.cs:P></
1 2 3 4 5 6 7 8 9 | namespace MyNamespace { public partial class MyForm : Form { // Some variable declarations // Some method declarations } } |
myform.designer.cs:P></
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | namespace MyNamespace { partial class MyForm { #region Auto Generated protected override void Dispose(bool disposing) { // Generated dispose code here } private void InitializeComponent() { // Generated designer code here // Error 'The variable <variable name> is either undeclared or was never assigned' points to one of the lines in here. } #endregion } } |
myform.extended.cs:P></
1 2 3 4 5 6 7 8 9 | namespace MyNamespace { public partial class MyForm { // Some variable declarations // Some method declarations } } |
我的问题是这房子是for the the variable变量declarations for the设计师必备的occur InitializeComponent调用的后面在茶叶中的任何文件。designer.cs and not of the other源文件中。我知道当它毋宁是说the variable undeclared恩!在外面undeclared was looking for the the扫帚/设计师。P></
似乎有人决定declarations to move into one of the other变量和类文件的部分不realise that the设计师打破。P></
As You should not have说坏的,有任何复杂逻辑控制of the user in the构造函数。P></
我们在任何地方,给复杂的initialisations should be the Load事件处理程序(或切换)。不管一个人多,在VS2010,using the of the Load事件控制(or is not onLoad(足够的)。P></
如果你在residing UserControl is the same as the form is that装配使用它,你想在View the form does not only the VS2010设计器execute the,but also of the UserControl的构造函数,其带载或空载(事件)。this does not to似乎总是发生,but when the needs to the设计师形态重建。P></
我知道如果你有任何外部资源或使用复杂的逻辑在那里,像数据库,它可以把this error when the opening for the enclosing设计师形态。This is using the Load事件因为坏should be the right to do恩广场。P></
You might have to for any重要资源利用initialisation懒惰初始化之前你have to running the form。P></
例如:P></
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | public class MyUserControl: UserControl { ... private List<MyObject> myObjects = null; private List<MyObject> MyObjects { get { if (myObjects == null) { // lazy initialisation here using (var dbContext = new MyVerySpecialDatabaseContext()) { myObjects = dbContext.MyObjects.ToList(); } } return myObjects; } } public MyUserControl() { InitializeComponent(); this.Load += new System.EventHandler(this.MyUserControl_Load); ... // more UI initialization, but no complicated logic here } private void MyUserControl_Load(object sender, EventArgs e) { this.myDataBindingSource.DataSource = MyObjects; } } |
在我的例子中,取决于我为其构建项目的平台。对于x86,一切都是正确的,但是对于x64,我收到了这个错误。所以,我的解决方案是在debug/x86下开发这个项目,然后为所有需要的目标平台构建它。
这是IDE中的一个bug。无论您如何看待它,构造函数都有一种不确定的方法来实例化您的字段,并在稍后的构造函数中将它们用作静态字段。
例如:
1 2 3 4 5 6 |
通常会破坏你的设计师。有时它会起作用,但通常它会混淆……可以重命名所有嵌入的资源,甚至删除它们。在.resx文件中有一个图像副本是有意义的,但是设计者希望每个控件都有一个副本。即使是共享的……它喜欢复制。
典型错误包括,"找不到‘mainform’",然后向下。为resources.getobject("myimage")获取一些NPE,即使.resx指定了确切的文件名。
如果在initializecomponent()例程中声明obj,则通常可以保证解决方法正常工作。
1 2 3 4 |
如何从外部引用这一点取决于您自己。
检查你的designer.cs文件。它控制declarations may be missing。P></
does你建立和运行代码?P></