2009-10-23 4 views
0

Я получил эту проблему:Проблема передачи данных обратно из дочерней формы

private void loadStringToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      StringLoader frmStringLoader = new StringLoader(); 
      string test = frmStringLoader.Result; 
      frmStringLoader.ShowDialog(); 
      MessageBox.Show(test.ToString()); 
     } 

и форма StringLoader:

public partial class StringLoader : Form 
    { 

     private string result; 
     public StringLoader() 
     { 
      InitializeComponent(); 
     } 

     public string Result 
     { 
      get { return result; } 
     } 

     private void btnLoadString_Click(object sender, EventArgs e) 
     { 
      if ((txtString.Text != string.Empty)) 
      { 
       result = txtString.Text; 
      } 
      this.Close(); 
     } 
    } 
} 

Эта вещь gaving мне NullReferenceException (я знаю).

Как справиться с этой штукой? Я просто хочу открыть форму, написать текст и нажать кнопку, чтобы отправить данные обратно вызывающему и закрыть форму.

Спасибо.

+1

Вы также можете проверить DialogResult вашего frmStringLoader.ShowDialog(), таким образом, если пользователь нажимает клавишу отмены вы не читаете строку frmStringLoader.Result. – ParmesanCodice

ответ

2

Вы устанавливаете свой результат перед открытием диалогового окна. Попробуйте реверсирования две строки кода, чтобы выглядеть следующим образом:

 frmStringLoader.ShowDialog(); 
     string test = frmStringLoader.Result; 
1

Вы захватывая результат, прежде чем показывать форму! Попробуйте

private void loadStringToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     StringLoader frmStringLoader = new StringLoader(); 
     frmStringLoader.ShowDialog(); 
     string test = frmStringLoader.Result; 
     MessageBox.Show(test.ToString()); 
    } 
+0

Я просто не могу в это поверить. Раньше я думал, что если я нажму кнопку OK в дочерней форме, данные не пройдут. Но это очень просто. Почему я раньше не пробовал? Спасибо вам (вам обоим) за вашу помощь. – GutierrezDev

+0

Это заставляет меня задуматься над чем-то: почему строка сделала свою работу? Когда я нажму кнопку Ok, он закрывает форму, не так ли? Итак, почему данные передаются? – GutierrezDev

+0

Я не знаю, правильно ли я понимаю ваш вопрос. Вы спрашиваете, почему вы можете получить доступ к frmStringLoader.Result, прежде чем появится диалоговое окно? – msergeant

Смежные вопросы