变量’variable_name’要么未声明,要么从未分配过
我有一个与标题错误有关的问题。 我正在使用c#和Visual Studio 2010。
我有一个声明为“公共类FormularioGeneral:Form”的表单,它是我的应用程序中其余表单的基础。 当我尝试访问Designer视图时,我会多次出现此错误,如图所示:
所有错误都引用InitializeComponent方法中的行,其中值被赋值给像这样的属性:
[...] this.PanelMargenIzquierdoCapaBase.BackColor = m_ColorCapaBase; [...]
但是所有变量都在与只读属性相同的类中声明,并且所有变量都在构造函数中调用的方法内分配。
财产声明:
protected Color m_VariableName; public Color VariableName { get { return m_VariableName; } set { } }
构造函数代码:
public FormularioGeneral() { ConfigurarUI(); AccionesConstructor(); InitializeComponent(); PostInicializacionComponentes(); EstablecerIcono(); InicializarLocalizacionFormulario(); }
ConfigurarUI方法:
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,重新打开。
非常感谢Marshall Belew!
可能由于您的构造函数代码而发生错误。 放置InitializeComponent();
在构造函数的开头像这样:
public FormularioGeneral() { InitializeComponent(); ConfigurarUI(); AccionesConstructor(); PostInicializacionComponentes(); EstablecerIcono(); InicializarLocalizacionFormulario(); }
说明:
变量在该方法中初始化。
我遇到了这个错误,因为我的项目只是x64。 显然,作为32位应用程序的Visual Studio无法在设计器中加载任何编译为64位的表单或控件。 它完全有道理,但错误没有给出任何迹象表明问题。
在x64中查看Visual Studio designer 的答案 不起作用 。
解决方法是在设计时将项目更改为任何CPU,然后在构建时返回。
在我的情况下,我有一个较旧的Windows窗体项目,其中InitializeComponents()
启动如下:
private void InitializeComponent() { var componentResourceManager = new ComponentResourceManager(typeof(MyForm)); ...
当访问InitializeComponent()
的componentResourceManager
时,这会导致稍后出现错误消息:
变量’componentResourceManager’未声明或从未分配过。
与新创建的表单进行比较时,我发现它与我的非工作表单相似,只有一件事:
该变量未命名为componentResourceManager
而只是resources
。
解
在对我的变量进行重命名以获得名称resources
,一切都成功运行。
Visual Studio 2017中的Windows窗体设计器确实正确打开了窗体。
我有同样的问题,清洁和重建对我不起作用。
在我的情况下,问题是由Visual Studio设计器从GAC加载引用的DLL而不是从.csproj文件中指定的
当我更新GAC中的DLL以使其具有相同版本时,一切正常。
关于变量,您可以在声明中简单地初始化它们吗? 即使您稍后更改了值,我认为这也足够了。 从我所看到的,编译器无法检查是否已初始化它们,因为它不是直接在构造函数代码上, 而是在虚拟方法上完成,该方法仅在运行时进行评估。
所以,而不是:
protected Color m_VariableName; public Color VariableName { get { return m_VariableName; } set { } }
做:
protected Color m_VariableName = Color.White; // Or null public Color VariableName { get { return m_VariableName; } set { } }
并注释:您应该避免构造函数中的虚拟调用,这可能会导致应用程序中出现模糊的错误。 在这里查看 。
在从表单构造函数调用的InitializeComponent()中创建第三方控件时,会发生此错误。 当我在InitializeComponent()之后创建它时,它对我来说很好。
public MyForm() //Form constructor { InitializeComponent(); //Create/initialize third party control here with new operator }
我正在使用Windows窗体中的WPF。
我在Windows窗体元素主机中托管了我的WPF用户控件。 由于当调用InitializeComponent()时,我在到达WPF控件的InitializeComponent()之前执行了Code。 棘手。
所以我把它从我的构造函数,Clean Build,Rebuild,Restart VS中移出来,一切都按预期工作。 最后。
当我的用户控件在构造函数中有一些与运行时资源相关的代码时,我遇到了这个问题。 我添加了空检查并修复了。
InitializeComponent(); if (MyConfig!= null) { this.label2.Text = MyConfig.text1; this.label3.Text = MyConfig.text2; this.label1.Text = MyConfig.text3; }
在我的情况下,我在我的工具栏中添加了第三方控件(通过.dll文件),并在我的表单中绘制其中一个。 由于某种原因,我的工具栏清除了一般组中的第三方控件(我将其添加到常规组中),因此VS无法找到此控件。 以下是我为解决这个问题所做的工作:
- 将此控件添加到工具栏中。
- 清洁解决方案
- 重建解决方案
如有必要,重绘控件。
不要放置除InitializeComponent();
之外的任何内容InitializeComponent();
在构造函数中。 您可以将代码放在Load()
等事件中。
用户控件引起问题,在尝试了所有建议之后( Focus解决方案然后按Alt + Enter )将解决方案的平台目标从x64更改为任何CPU解决了问题。