The variable 'variable_name' is either undeclared or was never assigned
我有一个关于标题错误的问题。我正在与C和Visual Studio 2010合作。
我有一个声明为"public class formurigeneral:form"的表单,它是我申请中其余表单的基础。当我尝试访问设计器视图时,会多次出现此错误,如图中所示:
所有错误都引用了InitializeComponent方法中的行,在该方法中,值被分配给类似以下属性:
1 2 3 | [...] this.PanelMargenIzquierdoCapaBase.BackColor = m_ColorCapaBase; [...] |
但是所有变量都声明在只读属性的同一类中,并且所有变量都分配在构造函数中调用的方法中。
财产声明:
1 2 3 4 5 6 | protected Color m_VariableName; public Color VariableName { get { return m_VariableName; } set { } } |
构造函数代码:
1 2 3 4 5 6 7 8 9 | public FormularioGeneral() { ConfigurarUI(); AccionesConstructor(); InitializeComponent(); PostInicializacionComponentes(); EstablecerIcono(); InicializarLocalizacionFormulario(); } |
配置方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public virtual void ConfigurarUI() { [...] m_AltoBordeSuperiorCapaBase = 30; m_AltoBordeInferiorCapaBase = 7; m_AnchoBordesLateralesCapaBase = 7; m_ColorCapaBase = Color.FromArgb(50, 100, 150); m_ColorTextoCapaBase = Color.White; m_ColorTextoBotonAplicacion = Color.Black; m_FuenteTextoIzquierdoCapaBase = new System.Drawing.Font("Verdana", 11.0F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); m_FuenteTextoCentroCapaBase = new System.Drawing.Font("Verdana", 14.0F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); [...] } |
因此,据我所知,在调用initilizecomponent函数之前,所有给出错误的变量都被正确地声明并赋值。
我在这一点上犹豫不决,不知道该怎么做来解决这个问题。希望你们中的一些人能在这个问题上帮助我。
因此,我在过去也遇到过同样的问题,为了解决这个问题,我做了以下工作:
- 溶液→清洁溶液;
- 构建→重建解决方案;
- 关闭Visual Studio,重新打开。
非常感谢马歇尔·贝勒!
我遇到此错误,因为我的项目仅为x64。显然,Visual Studio是32位应用程序,无法在设计器中加载编译为64位的任何窗体或控件。这完全有道理,但这个错误并不能说明问题出在哪里。
请参见对x64中的Visual Studio设计器的回答。
解决方法是在设计时将项目更改为任何CPU,然后在构建时返回。
可能是由于您的构造函数代码导致的错误。将EDOCX1[0]放在构造函数的开头,如下所示:
1 2 3 4 5 6 7 8 9 | public FormularioGeneral() { InitializeComponent(); ConfigurarUI(); AccionesConstructor(); PostInicializacionComponentes(); EstablecerIcono(); InicializarLocalizacionFormulario(); } |
说明:
变量在该方法中初始化。
在我的例子中,我有一个旧的windows窗体项目,其中
1 2 3 4 |
这导致稍后访问
The variable 'componentResourceManager' is either undeclared or was never assigned.
与新创建的表单进行比较时,我发现它与我的非工作表单类似,除了一件事:
变量的名称不是
解决方案
在对我的变量进行重命名以使其名称为
Visual Studio 2017中的Windows窗体设计器正确打开了窗体。
我也有同样的问题,清洁和重建对我来说不起作用。
在我的例子中,问题是由Visual Studio设计器从GAC加载引用的DLL而不是从.csproj文件中指定的
当我更新了GAC中的DLL以获得相同的版本时,一切都再次正常工作。
用户控件出现问题,在尝试了所有建议之后,(焦点解决方案,然后alt+enter)将解决方案的平台目标从x64更改为任何CPU,解决了问题。
当我的用户控件在构造函数中有一些与运行时资源相关的代码时,我遇到了这个问题。我添加了空值检查并修复了它。
1 2 3 4 5 6 7 | InitializeComponent(); if (MyConfig!= null) { this.label2.Text = MyConfig.text1; this.label3.Text = MyConfig.text2; this.label1.Text = MyConfig.text3; } |
不要在构造函数中放置除
在我的示例中,我在工具栏中添加了第三方控件(通过.dll文件),并在窗体中绘制了一个控件。出于某种原因,我的工具栏将此第三方控件从常规组中清除(我将其添加到常规组中),因此VS找不到此控件。下面是我为解决这个问题所做的:
必要时重新绘制控件。
我正在Windows窗体内使用WPF。
我在Windows窗体元素宿主中承载了我的WPF用户控件。因此,当调用initializecomponent()时,我在到达wpf控件的initializecomponent()之前执行了代码。狡猾的
所以我把它移出了我的构造函数,清理构建、重建、重新启动VS,一切都按预期工作。最后。
在从窗体构造函数调用的InitializeComponent()中创建第三方控件时,出现此错误。当我在初始化组件()后创建它时,它对我来说很好。
1 2 3 4 5 6 | public MyForm() //Form constructor { InitializeComponent(); //Create/initialize third party control here with new operator } |
关于变量,可以在声明中简单地初始化它们吗?我认为这就足够了,即使你以后改变这个值。据我所见,编译器无法检查您是否初始化了它们,因为它不是直接在构造函数代码上,而是在一个虚拟方法上完成的,该方法只在运行时进行计算。
因此,而不是:
1 2 3 4 5 6 | protected Color m_VariableName; public Color VariableName { get { return m_VariableName; } set { } } |
做:
1 2 3 4 5 6 | protected Color m_VariableName = Color.White; // Or null public Color VariableName { get { return m_VariableName; } set { } } |
注释:您应该避免在构造函数中进行虚拟调用,这会导致应用程序中出现模糊的错误。在这里检查一下。
首先,我有一些代码引用了设计器无法加载的类型(无论出于什么原因)。然后我在构造器中有无法从本地笔记本执行的代码。我决定最好的选择是将逻辑转移到加载事件,并检查组件是否处于设计模式,如果处于设计模式,则退出。
即使这对我来说还不够,因为设计者仍然试图对方法中稍后出现的类型进行JIT,所以我不得不将它移到一个单独的方法中,以防止这种情况发生。以下是我最后得出的结论:
1 2 3 4 5 6 7 8 9 10 11 | private void userControl_Load(object sender, EventArgs e) { if (DesignMode) return; Initialize(); } private void Initialize() { // do your work } |
特别要感谢这个"所以回答",它在一篇博客文章中给了我一条评论,告诉我在加载事件之前不要访问DesignMode属性…