变量’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与本地存储的DLL没有相同的版本。

当我更新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无法找到此控件。 以下是我为解决这个问题所做的工作:

  1. 将此控件添加到工具栏中。
  2. 清洁解决方案
  3. 重建解决方案

如有必要,重绘控件。

不要放置除InitializeComponent();之外的任何内容InitializeComponent(); 在构造函数中。 您可以将代码放在Load()等事件中。

用户控件引起问题,在尝试了所有建议之后( Focus解决方案然后按Alt + Enter )将解决方案的平台目标x64更改为任何CPU解决了问题。