C#でフォームを切り替える最も良い方法は何ですか?C#でフォームを切り替える最も良い方法は何ですか?
シナリオ:Form1のボタンをクリックし、既存のForm1を終了してForm2を作成します。 これをどうすれば実現できますか?
誰かがWinformsとWPFのこのタスクの複雑さを比較することができたら、私はそれを高く評価します。
C#でフォームを切り替える最も良い方法は何ですか?C#でフォームを切り替える最も良い方法は何ですか?
シナリオ:Form1のボタンをクリックし、既存のForm1を終了してForm2を作成します。 これをどうすれば実現できますか?
誰かがWinformsとWPFのこのタスクの複雑さを比較することができたら、私はそれを高く評価します。
これを行う最も簡単な方法は、両方のフォームを開く制御機能を持たせることです。最初のフォームでボタンをクリックすると、それを閉じて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();
確かに、現在のフォームを閉じて、新しいフォームのインスタンスを作成し、それを表示するのは非常に単純な問題ですか?次のコード(あなたのケースのClickイベントハンドラの下)は、WinFormsまたはWPFで動作する必要があります。
this.Close();
(new Form2()).Show();
私はおそらく何かここに行方不明ですか?
ここで、「(新しいForm2())。Show()」を探しますか? Form1オブジェクトは既に破棄されているので、そのコードには手をつけません。 –
ボタンのクリックイベントハンドラには、これらの2行が属しています。最初の行が現在のフォームを閉じるので、コードの実行は突然停止しません!試してみて、問題がある場合はお知らせください。 – Noldorin
this.Close(); (新しいForm2())。Show(); これはボタンクリックでは動作しません。これはフォーム2に入る前にウィンドウを終了させます。 –
はい、これが解決策です。 100以上のウィンドウが必要な場合はどうなりますか?私はそれらをすべて作り出して記憶に残すことができず、必要なときにそれらを見えるようにすることはできません。 –