2009-04-12 25 views
0

C#でフォームを切り替える最も良い方法は何ですか?C#でフォームを切り替える最も良い方法は何ですか?

シナリオ:Form1のボタンをクリックし、既存のForm1を終了してForm2を作成します。 これをどうすれば実現できますか?

誰かがWinformsとWPFのこのタスクの複雑さを比較することができたら、私はそれを高く評価します。

答えて

4

これを行う最も簡単な方法は、両方のフォームを開く制御機能を持たせることです。最初のフォームでボタンをクリックすると、それを閉じて2番目のフォームに移動します。

using (var form1 = new Form1()) { 
    form1.ShowDialog(); 
} 
using (var form2 = new Form2()) { 
    form2.ShowDialog(); 
} 

WPFのコードは似ています。最大の違いは、WPFウィンドウ(ほとんど全てのクラス)はIDisposableを実装していないため、usingステートメントを必要としないということです。

var win1 = new Window1(); 
win1.ShowDialog(); 
var win2 = new Window2(); 
win2.ShowDialog(); 
+1

はい、これが解決策です。 100以上のウィンドウが必要な場合はどうなりますか?私はそれらをすべて作り出して記憶に残すことができず、必要なときにそれらを見えるようにすることはできません。 –

1

確かに、現在のフォームを閉じて、新しいフォームのインスタンスを作成し、それを表示するのは非常に単純な問題ですか?次のコード(あなたのケースのClickイベントハンドラの下)は、WinFormsまたはWPFで動作する必要があります。

this.Close(); 
(new Form2()).Show(); 

私はおそらく何かここに行方不明ですか?

+0

ここで、「(新しいForm2())。Show()」を探しますか? Form1オブジェクトは既に破棄されているので、そのコードには手をつけません。 –

+0

ボタンのクリックイベントハンドラには、これらの2行が属しています。最初の行が現在のフォームを閉じるので、コードの実行は突然停止しません!試してみて、問題がある場合はお知らせください。 – Noldorin

+0

this.Close(); (新しいForm2())。Show(); これはボタンクリックでは動作しません。これはフォーム2に入る前にウィンドウを終了させます。 –

関連する問題