2017-07-02 4 views
2

Form1では、「追加」をクリックした後にForm2がポップアップ表示されます。私が欲しいもの現在のフォームを閉じて、OKボタンをクリックした後に文字列をプリフォームに渡す方法

private void btAdd_Click(object sender, EventArgs e) 
    { 
     DialogResult dr = new DialogResult(); 

     AddWinForm addWinForm = new AddWinForm(); 

     dr = addWinForm.ShowDialog(); 
     addWinForm.Show(); 
    } 

は、入力された文字列を渡すし、Form1にリストボックスをリフレッシュし、クリックして「OK」ボタンの後のForm2を閉じますということです。しかし、それは何か間違っているようです。

private void btnOK_Click(object sender, EventArgs e) 
    { 
     MainForm mainForm = new MainForm(); 
     mainForm.AddMessageInfo = textBoxAddWinForm.Text; 
     mainForm.Close(); 
    } 

答えて

2

ユーザーがOKボタンを押したことをForm1に知らせる必要があります。

をForm1:

private void btAdd_Click(object sender, EventArgs e) 
{ 
    AddWinForm addWinForm = new AddWinForm(); 
    DialogResult dr = addWinForm.ShowDialog(); 

    if(dr == DialogResult.OK) 
    { 
     string info = addWinForm.AddMessageInfo; 

     // do something 
    } 
} 

のForm2:

public string AddMessageInfo { get; private set; } 

private void btnOK_Click(object sender, EventArgs e) 
{ 
    AddMessageInfo = textBoxAddWinForm.Text; // Set AddMessageInfo 
    this.DialogResult = DialogResult.OK; // Let parent form know you pressed OK 
    this.Close(); // Close this form 
} 
0

それを行うにはこれではないエレガントな方法が、それは仕事を取得します。 他の方法では、デリゲートを使用してあるフォームから別のフォームに情報を渡すことができます。

Public class addWinForm : Form 
    { 
    ... 
     public string Answer { get { return answer;}} 
     private string answer; 

     private void btnOK_Click(object sender, EventArgs e) 
     { 
      //this is supposed 
      answer = "1111"; 
      Close(); 
     } 
    } 
public class MainForm : Form 
{ 
    .... 
    private AddWinForm addWinForm = null;  
    private void btAdd_Click(object sender, EventArgs e) 
     {  
      addWinForm = new AddWinForm(); 

      addWinForm.ShowDialog(); 
      string answerAfterButtonOk = addWinForm.Answer; 
      addWinForm.Dispose(); 
      addWinForm = null; 
     } 
} 
関連する問題