2010-12-31 13 views
0

私は2つのウィンドウフォームを持っています。プログラムの開始時にアクティブになる最初の人は、別の2番目のウィンドウのフォームが表示され、そこにユーザーが名前とHITを入力するテキストフィールドを持つボタンがあります。別のwinformから値を取得し、現在の値に渡す!

私は1番目のフォームに変数名があります:nameproccessedこれは、2番目のフォームから名前を取得します。しかし、問題は、私のボタンは、最初のフォームでは、名前を取る以外の機能を持って、どのように私は最初の名前を2番目のフォームから取得し、関数の残りの実行を処理するコンパイラのフローを停止できますか?ここで

は、私のコードの抜粋です:

//1st form 
//Class1 
public string _nameProcessed = ""; 



private void btnGetSomething_Click(object sender, EventArgs e) 
    { 
      if (!showdial()) 
      return; 
      string name = _nameProcessed; 
     //some more functionalities in this function!!! 
     //This PART is NOT executing.... 

    } 



     private bool showdial() 
    { 
     InputName inm = new InputName(); 
     if (inm.ShowDialog() != System.Windows.Forms.DialogResult.OK) 
      return false; 
     _nameProcessed = inm.name; 

     return true; 
    } 

//2nd form 
//Class2 
public string name; 

private void btnCancel_Click(object sender, EventArgs e) 
    { 
     //MessageBox.Show("Please Enter Your Code! "); 
     this.Close(); 
    } 

    private void btnOkay_Click(object sender, EventArgs e) 
    { 
     //string name; 
     name = tbxName.Text; 
     Form1 ict = new Form1(); 

     if (name == "") 
     { 
      MessageBox.Show("Please Enter Your Name!"); 
      this.DialogResult = System.Windows.Forms.DialogResult.No; 

     } 
     else 
     { 
     ict._nameProcessed = name; 
     this.Close(); 
     } 

    } 

は今、私は2番目のフォームから「名前」を取りたい機能の残りの部分を実行して第一形式で_nameprocessedの上に置くと。どうやってやるの?助けて!

+0

これらはフォームクラスではありません。これらは単なるメソッドです。詳細をお知らせください。フォーム名は何ですか? –

+0

Form1の名前はTechShipping –

+0

です。Form2の名前はInputNameです。 1つのテキストボックスと2つのボタン([OK]と[キャンセル])があります。 –

答えて

5

利用にShowDialog代わりの表示により示唆されるように

secondForm.ShowDialog(); 

を使用しています。

inm.ShowDialog(); 

Form2コードが閉じられるまでForm1コードを停止します。 フォームが閉じられると、フォームからname変数を読み取ることができます。

_nameProcessed = inm.name; 

最終的なコードは次のようになります。第二の問題について

private void showdial() 
{ 
    InputName inm = new InputName(); 
    inm.ShowDialog(); 
    _nameProcessed = inm.name; 

} 

EDIT: ボタンは "DialogResult" という名前のプロパティを持っています。 「OK」ボタンを「OK」に設定し、「キャンセル」を「キャンセル」に設定します。あなただけのブール値を返すために、小さなIFと変更機能を必要とするコードで :

private bool showdial() 
{ 
    InputName inm = new InputName(); 
    if (inm.ShowDialog() != System.Windows.Forms.DialogResult.OK) 
     return false; 
    _nameProcessed = inm.name; 

    return true; 
} 

次にボタンで

private void btnGetSomething_Click(object sender, EventArgs e) 
{ 
    if(!showdial()) 
     return; 
    //some more functionalities in this function!!! 
} 

EDIT 2クリック - 「この行を追加しthis.Close () ':

0:

this.DialogResult = System.Windows.Forms.DialogResult.OK; 

は、最終的なコードを作ります

+0

ありがとう!それは働いた...今ここに2番目の問題:2番目のフォームが開いて、そのフォームを閉じていても、それは実行されています。私はユーザーに自分の名前を入力させたい。彼らがキャンセルを押すと私のコードが実行されたくない... –

+0

@ klm9971:私はあなたの第2の問題を含めるために投稿を編集しました – jpiolho

+0

@Jorge:ポップアップフォームに自分の名前を入力するとき、 .... –

0

2番目の形式では、パブリックフィールドに入力を保存します。 2番目のフォームを隠した後に表示すると、まだパブリック変数にアクセスできます。だから値を取得し、2番目のフォームを処分します。

EDIT: フォーム1でコード実行を停止します。ホルヘ

+0

私は2番目のフォームを表示しているとき、1番目のフォーム関数の実行が進行中です...私はそれを止めたいです。残りの機能の実行を停止するにはどうすればよいですか? –

関連する問題