2016-10-12 9 views
0

これまでは、子フォームで同じ関数を呼び出せるようにするためにこのコードを使用しました。C#親フォームの2つのメソッドから同じ子フォームのインスタンスへのアクセス

親フォームコード:

FormGame frmGame; // i put this here so that in the second function it doesnt complain about frmGame not being set. 
    public void CreateGame(string Level) // this function is called first 
    { 
     FormGame frmGame = new FormGame(this); // i need both functions to be able to access this instance of the child form 
     frmGame.SetLevel(Level); // sets the text of a label in the child form 
     frmGame.Show(); 
    } 

    public void UpdateGame(string Level) // then this function is called second 
    { 
     frmGame.SetLevel(Level); // to update the same label as set in the first method 
    } 

このコードの問題は、はい、それは何らかのエラーが出ていない間に、第2の関数が呼び出されたときに、ちょうどそこに座って、それをデバッグするときにするとき、それは見つける傾けることですfrmGameがnullのように、最初の関数で設定されたFormGameのインスタンス。

私が試みた:

  1. この
    FormGame frmGame =新しいFormGame(本)のように両方の機能外ステートメントを初期化フォーム全体を引っ張ります。
    それが実行しているときにエラーを削除し、「これは」関数の内部であることと、その行からそれを除去しないようにdoesntのが、
  2. に言ったとき、ラベルは、トップ
  3. のコードに示されているものに変更はありません
  4. 持つ
    FormGame frmGame =新しいFormGame(この); 両方の関数の一番上の行にあるが、それを更新しようとするたびにフォームを最初のものに戻します。
  5. 2番目の関数でRefresh()を使用し、変更されても無駄になります。
  6. といくつかのより多くが、彼らは私が正しいと感じるどのような方法をオフしました。

    私の目標は、最初の関数でフォームを作成してラベルを設定し、2番目の関数が新しい文字列で呼び出されたときに、閉じずに同じラベルを更新できるようにすることですオープンフォーム。

答えて

4

コードでは、FormGameという新しいインスタンスが作成されます。そのスコープはその関数内にのみあります。決してこれを使用すると、メソッドの外を定義しfrmGame変数に影響を与えません。

FormGame frmGame = new FormGame(this); 

メソッド内で新しい変数を定義していない、あなたはUpdateGameを呼び出すときにエラーを避けるために。

public void CreateGame(string Level) 
{ 
    frmGame = new FormGame(this); // use the class-level field 
    ... 
関連する問題