2017-04-22 17 views
1

私はC#を使用してWindowsフォームアプリケーションを作成しています。私のフォームには、ラベル、リストボックス、およびボタンがあり、それらのすべてを編集する必要があります。それらは別のクラスから編集され、他のロジックを実行するためにラベルの値がさらに必要になります。別のクラスからフォームコントロールにアクセスする

私の問題は、他のクラスからこれらのコントロールにアクセスしていることです。 Iは、フォームのインスタンスを作成し、このようにそれを使用してみました:

Form frm = new Form(); myVar = frm.lblMylabel.Text;

しかし、ブレークポイントを使用して、私は、コードに従った、それが作成されている上記インスタンス間のループ、およびフォームの開始このコードは、インスタンスが作成された場所でクラスを再度呼び出します。

私は答えをオンラインで見つけようとしましたが、私がしようとしているものには当てはまらないようですが、やり方がわからないうちはあまりにも複雑です。 それでは、私の質問には:値にアクセスし、別のクラスのフォームのコントロールから値を編集できる比較的簡単な方法がありますか?

ありがとうございます。

編集 - ブレークポイントはポイント3から始まります。、 '=新しいフォーム();'。

ループからポイント1

ポイント2は、GamePlay()を呼び出します。

到達範囲ポイント3とループの再起動。あなたがfrmGameの新しいインスタンスを作成しますGamePlayメソッド内で、Point 3

public partial class frmGame : Form  //Point 1 
{ 
    public frmGame() 
    { 
     InitializeComponent(); 


     Game.GamePlay(); //Point 2 

    } 

class Game{ 

    public static void GamePlay() 
    { 
     frmGame form = new frmGame(); //Point 3 

     form.lstPrevious1.Items.Add("Item Number"); 

    } 
} 
+1

はStackOverflowのへようこそ。ここに問題の[最小限の、完全で検証可能な例(https://stackoverflow.com/help/mcve)]を投稿してください。 – Caltor

+0

ありがとう、私は質問を編集するために編集しました。 – 10aples

答えて

1

あなたの問題は、異なるクラスのプロパティにアクセスし、あなただけの再帰ループを生産しているとは何の関係もありません。インスタンス(オブジェクト)を作成するときは、constructorが呼び出されます。この場合、コンストラクタはメソッドpublic frmGame()です。このコンストラクタ内

、あなたは今呼んで、私たちは前から見たように、再び frmGame(再び Point 3)の新しいインスタンスを作成し、 GamePlayPoint 2)も、再びそのコンストラクタ( Point 1)を呼び出します。

この時点では、既に2つのフォームが作成されています(ただしまだ示されていません)。

すぐにスタックのオーバーフローが発生します。

一つの可能​​な解決策:プログラム開始時に一度だけ呼び出されることが保証されている別の方法にあなたのインスタンスを作成する行を移動:

public partial class frmGame : Form  //Point 1 
{ 
    public frmGame() 
    { 
     InitializeComponent(); 


     Game.GamePlay(); //Point 2 

    } 
} 

class Game{ 

    public static void GameStart(){ 
     frmGame form = new frmGame(); //Point 3 
    } 

    public static void GamePlay() 
    { 
     form.lstPrevious1.Items.Add("Item Number");  
    } 
} 
+0

申し訳ありませんが、私は摂取が遅いですが、私は別のメソッドでインスタンスを作成する場合、どのように一度呼び出されることを確認するには?インスタンスが作成されるたびにクラス 'frmGame'が呼び出されるので、これはそのクラスの先頭からコードの実行を開始します。しかし、このクラスはコードの開始点であるため、インスタンスを作成するためのメソッドは 'frmGame'のどこか、' frmGame'から呼び出された別のメソッドから呼び出されなければなりませんでしたか? – 10aples

+0

_class_をコールできません。_method_のみを呼び出します。この場合は 'Game.GamePlay'です。しかし、フォームの作成が 'Game.GameStart'で行われた後、再び再帰されることはありません。 – Psi

+0

コンストラクタで 'Game.GameStart'メソッドをどのように呼び出さないのですか? – 10aples

関連する問題