0

私はウィンドウアプリケーションが初めてです。form1 と form2 の 2 つのフォームがあります。From1 にはテキスト ボックスがあり、form2 にはコンボ ボックスがあります。form2 を閉じたときに、form2 のコンボボックス選択項目を form1 のテキストボックスに表示したいので、静的クラス (marketclass) を無視し、選択した値を statik 変数に割り当てました。Beowはform2の私のコードです。

    private void cboMarkets_SelectedIndexChanged(Object sender, System.EventArgs e)
    {
         marketclass.nAlgoproperty = Convert.ToInt32(cmbMarket.SelectedValue);
         this.Close();
    }

idの下に、form1の私のコードがあります。

   public Form1()
    {
        InitializeComponent();          

        if (marketclass.nAlgoproperty > 0)
        {
            textbox1.text = marketclass.nAlgoproperty;
       }
}

しかし、機能していません。では、どうすればこのことを達成できますか。

ありがとう。

4

5 に答える 5

3

ShowDialog() を介して Form2 を表示し、値を取得します。

// ... in Form1 ...
Form2 f2 = new Form2();
f2.ShowDialog(); // code stops here until "f2" is closed
textbox1.text = marketclass.nAlgoproperty;
于 2013-05-02T04:47:57.347 に答える
1

一般に

このタイプの問題は、Model-View-Controller (MVC) パターンを使用してうまく解決できます。

これは、MVC を正確にサポートしていない WinForms のように見えます。ただし、それにもかかわらず、MVC パターンを確実に実装できます。

良い入門記事については、以下をご覧になることをお勧めします

http://www.codeproject.com/Articles/383153/The-Model-View-Controller-MVC-Pattern-with-Csharp

この質問に固有

静的変数を使用して同様の結果を達成しようとしています。問題は、おそらくバッキング静的変数の値を変更するタイミングと、変更を探すタイミングです。

textbox1.text = marketclass.nAlgoproperty;

Form1 がロードされたときに呼び出されます。Form2 のチェックボックス ハンドラが の値を更新する前に、Form1 が実際にロードされた可能性がありますmarketclass

現在はそうでなくても、現在使用しているパターンで遭遇する問題のタイプを示しています。

MVC パターンは、UI 要素が値を変更すると値が更新され、バインドされた他のすべての UI 要素も更新されるように、1 つ以上のコントロールをバッキング変数にバインドすることで、この種のタイミングの問題を解決します。逆に、値が変更された場合 (データベースから読み込まれたなど)、バインドされたすべての UI 要素が自動的に更新されます。

于 2013-05-02T04:40:12.787 に答える
0

ComboBox の ValueMember プロパティを設定しましたか? そうでない場合、またはコンボボックスを使用してテキストを値として表示する場合は、代わりに SelectedText プロパティを使用する必要があります。

private void cboMarkets_SelectedIndexChanged(Object sender, System.EventArgs e)
{
     marketclass.nAlgoproperty = Convert.ToInt32(cmbMarket.SelectedText);
     this.Close();
}
于 2013-05-02T04:40:00.313 に答える
0

のコンストラクタで代入textbox1.Text = marketclass.nAlgopropertyを実行しています(つまり、 に値を代入する)。Form1 Form2marketclass.nAlgoroperty

これを行うための「最善の」方法は別として、Form1そのショーの呼び出しの後に割り当てを実行するだけですForm2(つまり、いったんForm2終了します)。

form2.Show();
textbox1.Text = marketclass.nAlgoproperty;

それはそれを行う必要があります。それが機能するようになったら、MVC や Observerの設計パターンなど、より良い方法を検討してください。

于 2013-05-02T04:40:45.503 に答える