2

WPFで複数のウィンドウを使用し、ボタンを使用してそれらを切り替えるのに問題があります。理論的には、私のアプリケーションには2つのボタンがあり、それぞれ1つは前に、もう1つは後ろにあり、それぞれウィンドウを前のウィンドウと次のウィンドウに変更します。

残念ながら、Stackoverflowエラーが発生します。調査の結果、前のウィンドウが作成されたときにウィンドウを再度作成する新しいウィンドウを作成することと関係があり、ひどいループが発生していると感じています。ただし、この問題を防ぐためにウィンドウ作成コードをどこに配置できるか、またはこれを修正する他の方法があるかどうかはわかりません。

これが私のウィンドウのコードです:

最初のウィンドウ

public partial class Presenation_1 : Window
{
    Presentation_2 p2 = new Presentation_2();
    MainWindow M = new MainWindow();

    public Presenation_1()
    {
        InitializeComponent();
    }

    private void btnForward_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
        p2.Show();
    }

    private void btnBack_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
        M.Show();
    }
}

2番目のウィンドウ

public partial class Presentation_2 : Window
{
    Presentation_3 p3 = new Presentation_3();
    Presenation_1 p1 = new Presenation_1();
    public Presentation_2()
    {
        InitializeComponent();
    }

    private void btnForward_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
        p3.Show();
    }

    private void btnBack_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
        p1.Show();
    }
}

3番目のウィンドウ

public partial class Presentation_3 : Window
{
    Presentation_4 p4 = new Presentation_4();
    Presentation_2 p2 = new Presentation_2();

    public Presentation_3()
    {
        InitializeComponent();
    }

    private void btnForward_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
        p4.Show();
    }

    private void btnBack_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
        p2.Show();
    }
}

4番目のウィンドウ

public partial class Presentation_4 : Window
{
    Presentation_3 p3 = new Presentation_3();
    MainWindow M = new MainWindow();

    public Presentation_4()
    {
        InitializeComponent();
    }

    private void btnForward_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
        M.Show();
    }

    private void btnBack_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
        p3.Show();
    }
}

前もって感謝します

4

2 に答える 2

4

ボタンがクリックされる前に Windows を作成しないでください。イベント ハンドラーで作成できます。

private void btnForward_Click(object sender, RoutedEventArgs e)
{
    var p2 = new Presentation_2();
    this.Close();
    p2.Show();
}
于 2013-03-19T11:10:32.580 に答える
1

ウィンドウを作成すると、他の 2 つのウィンドウが作成されます。

new Presentation_X()

この新しいウィンドウは自動的に表示され、それ自体が他の 2 つのウィンドウを開きます。

このウィンドウを Mainwindow で一度作成し (これを自動的に非表示にする)、コンストラクターで参照を渡し、これらのウィンドウを閉じないようにすることができます。簡単な例(テストされていません):

public partial class Presenation_X : Window
{
    private Window preview;
    private Window next;

    public Presenation_X(Window w1, Window w2)
    {
        this.preview = w1;
        this.next = w2;

        InitializeComponent();
    }

    private void btnForward_Click(object sender, RoutedEventArgs e)
    {
        this.next.Show();
        this.Hide();
    }

    private void btnBack_Click(object sender, RoutedEventArgs e)
    {
        this.preview.Show();
        this.Hide();
    }
}
于 2013-03-19T11:10:46.953 に答える