2016-10-20 6 views
0

私は2つのWindows、つまりMainWindowsとForm2を持っています。 MainWindows上のボタンを押すと、Form2が表示されます。 2番目のウィンドウには2つのテキストボックスがあり、Form2のButtonをクリックすると、これらのテキストボックスにあるものを格納するための文字列を追加しましたが、値を格納する代わりにnullに設定されています。文字列をnullに設定しました

private void remove_Button_Click(object sender, RoutedEventArgs e)   
{   
    string userValue; 

    userValue = user_Text.Text; 
    form2 form = new form2(); 
    form.Show(); 
    form.Replace_Button.Click += Replace_Button_Click; 

    } 

    void Replace_Button_Click(object sender, RoutedEventArgs e) 
    { 
    form2 form = new form2(); 
    replaceFirstValue = form.firstValue_TextBox.Text; 
    replaceLastValue = form.lastValue_TextBox.Text; 
    repFirstConversion = int.TryParse(replaceFirstValue, out repFirstInt); 
    repLastConversion = int.TryParse(replaceLastValue, out repLastInt); 
    if (repFirstConversion == false) 
     this.Close(); 
       //MessageBox.Show("Please Enter Integer");      
    } 

私はform2.xaml.csにコードがありません。

+1

あなたのコードに関するちょっとしたメモ: 'if(repFirstConversion == false)'の代わりに 'if(!repFirstConversion)'を書いた方が読みやすくなります。 – haindl

+0

@ haindl、ありがとうございます –

答えて

2

両方のイベントハンドラでform2という新しいインスタンスを作成すると、2つの異なるフォームが作成されます。後者は前者については何も知らず、デフォルト値しか持たない。

form2のインスタンスを1つだけ作成し、メンバー変数にそのインスタンスへの参照を格納し、それを使用して値を取得する必要があります。

private form2 form; // A member variable to hold a reference to the form 

private void remove_Button_Click(object sender, RoutedEventArgs e) 
{ 
    ... 
    form = new form2(); // Set the member variable 
} 

そしてReplace_Button_Clickからあなたがform2の新しいインスタンスを作成した最初の行を削除します。

+0

私はあなたの最初の2行を理解しましたが、私はC#をとても新しくしていて、それについてたくさん考えていないので、 –

+0

@ArsalanKhattak私は例を追加しました。基本的には、メソッドの変数をクラスに移動してその値を保持します。次に、フォームを一度作成し、他のボタンハンドラでも同じフォームを使用します。 –

+2

調査するトピックは「スコープ」と呼ばれます。これはあなたが知る必要があることを教えてくれるはずです。この場合、フォームはグローバルにする必要があるときはローカルスコープです。 – Equalsk

関連する問題