2011-12-15 90 views
20

タイトルに関するエラーに関する質問があります。私はC#とVisual Studio 2010で作業しています。変数 'variable_name'は宣言されていないか、割り当てられていません。

私は、アプリケーションの残りのフォームのベースとなる "public class FormularioGeneral:Form"として宣言されたフォームを持っています。私がデザイナービューにアクセスしようとすると、画像でわかるように、このエラーが何度か表示されます。

Sample of errors すべてのエラーは、値がこのようなプロパティに割り当てられている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関数が呼び出される前に値が割り当てられます。

私はこの時点で立ち往生し、問題を解決するために何をすべきか分かりません。あなたの一部がこの問題で私を助けてくれることを願っています:D

ありがとうございました! T

+0

コードを使用する前にコンストラクタを呼び出してください。 公開Form1() { FormularioGeneral(); } – Moonlight

+0

こんにちはブルーノ。エラーは、いくつかのプロパティにm_ *値を割り当てると、InitializeComponentメソッド内で生成されます(たとえば、ボタンのテキストカラーを設定するとき - > this.Button1.ForeColor = m_TextButtonColor) – Kitinz

+0

もここで説明します: http ://stackoverflow.com/questions/1915183/got-error-the-variable-variable-name-is-either-undeclared-or-was-never-assigne – Christian

答えて

7

おそらく、コンストラクタコードのためにエラーが発生する可能性があります。このようなコンストラクタの先頭にInitializeComponent();を置き:

public FormularioGeneral()  
{   
    InitializeComponent(); 
    ConfigurarUI();   
    AccionesConstructor(); 
    PostInicializacionComponentes();   
    EstablecerIcono();   
    InicializarLocalizacionFormulario();  
} 

説明:

変数は、そのメソッドで初期化されています。

+0

私はすでに試しましたが、これで問題は解決しません。とにかく、変数は値なしで宣言されます。値は "ConfigurarUI"メソッドの中で割り当てられます(このメソッドは変数を使用する前に実行する必要があります)。最後に、InitializeComponentに変数が使用されます。 – Kitinz

+0

私が正しく理解している限り、変数を使用するために 'InitializeComponent'のコードを変更しましたか? – Fischermaen

+0

私はあなたがコンパイルするたびに自動的に生成されるので、割り当てがInitializeComponentに「ハードコードされた」とは思わない。私は値がデザイナーを介して割り当てられたと仮定しますが、他の人がこのプロジェクトを開始して以来、それを保証することはできません。 "012"を「sucessor」と呼んでいます:P – Kitinz

1

変数については、単に宣言で変数を初期化できますか?後で値を変更しても、それで十分だと思います。私が見ているところでは、コンパイラは、コンストラクタコードに直接ないので、初期化したかどうかをチェックすることができません。実行時にのみ評価される仮想メソッドで処理されています。

ので、代わりに:

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 { } 
} 

コメント:あなたは、アプリケーション内のあいまいなエラーが発生する可能性があり、コンストラクタで仮想呼び出しを、避けるべきです。それを確認してくださいhere

+0

答えをありがとう。私はあなたが言うように、宣言の変数を初期化しましたが、問題を解決しませんでした:P 私も仮想メソッドについて読んで、コンストラクタ内の仮想メソッド内のすべてのコードをコピーする必要はありませんP – Kitinz

22

だから、私は同じ問題をいただきたい、修正のために私がやった:

  • ソリューション - >ソリューションのクリーン。
  • ビルド - >リビルドソリューション。
  • Visual Studioを閉じて、もう一度開きます。

おかげでたくさんMarshall Belew!

+1

私はそれを行い、それはうまくいくが、なぜこのエラーが起こっているのか、それをどう避けることができるのだろうかと思う。これはVSバグですか? – Pedro77

+1

誰かがここで彼らのやり方を見つけた場合、違反コントロールのコンストラクタが 'public'以外のものとして宣言されていることが原因で問題が発生する可能性があります。 – Lara

+0

それは 'きれいな'解決策ではなく 'クリア'です。 – Zero

1

に私は同じ問題や清掃を持っていたし、再建は私のために動作しませんでした。

私の場合は、Visual Studioデザイナーが、参照先のDLLを.csprojファイルに指定されている<HintPath>ディレクトリからロードする代わりにロードしているために発生していました。 GACのDLLには、ローカルに保存されたDLLと同じバージョンがありませんでした。

GACのDLLを同じバージョンに更新したところ、すべてが正常に機能しました。

1

このエラーは、フォームコンストラクタから呼び出されたInitializeComponent()でサードパーティコントロールを作成しているときに表示されます。 InitializeComponent()の後に作成したとき、それは私のために正常に動作します。

public MyForm() //Form constructor 
{   
    InitializeComponent(); 

    //Create/initialize third party control here with new operator  
} 
+0

これはまさに私の問題です。私はいくつかのUserControlを作成しました。そして何らかの理由で、FormのDesignを生成するプロセスは、常に不平を言います。私が何かを移動した後、InitializeComponentから疑わしいと思われるように見えますが、うまく動作します。ありがとう –

5

私のプロジェクトはx64のみなので、このエラーが発生しました。どうやらVisual Studioは32ビットアプリケーションであるため、デザイナーで64ビットにコンパイルされたフォームやコントロールをロードすることはできません。それは完全に意味をなさないが、エラーはあなたに問題であることを知らせない。

the answer~Visual studio designer in x64 doesn't workを参照してください。

回避策は、プロジェクトを設計時にすべてのCPUに変更し、ビルド時に戻すことです。

+0

ビジュアルスタジオ2017でもまだまだ本当の理由はわかりません... Web上で2時間、GUIを手動で変更しようとした後...すべて私がここに来るまで... – ephraim

1

私はWindowsフォームの中でWPFを使用しています。

私はWindows Forms Element HostでWPF User Controlをホストしました。そのため、InitializeComponent()が呼び出されたとき、私は自分のWPFコントロールのInitializeComponent()に達する前にCodeを実行しました。トリッキー。

私はそれを私のコンストラクタ、クリーンビルド、リビルド、再起動VSの外に移動し、すべて期待どおりに動作します。最後に。

1

私のユーザーコントロールに、ランタイムリソースに関連するコンストラクタのコードがいくつかある場合、この問題が発生しました。私はヌルチェックを追加し、それが修正されました。私の場合は

 InitializeComponent(); 
     if (MyConfig!= null) 
     { 
      this.label2.Text = MyConfig.text1; 
      this.label3.Text = MyConfig.text2; 
      this.label1.Text = MyConfig.text3; 
     } 
0

、私は私のツールバー(.dllファイル経由)でのサードパーティ製のコントロールを追加し、私の形でそれのいずれかを描きます。そして何らかの理由で、私のツールバーがこのサードパーティのコントロールを一般グループから削除します(一般グループで追加しました)ので、VSはこのコントロールを見つけることができません。 これは私がこの問題をスローするためにしたものです:

  1. このコントロールをツールバーに追加してください。
  2. クリーンソリューション
  3. neccessary場合、コントロールを再描画ソリューション

を再構築します。

関連する問題