0

私はいくつかのポケットPCアプリを持っていて、ここで説明されている深刻な問題を抱えています:https ://stackoverflow.com/questions/472598 。解決策を探している間、私はMain()で実際にかなり愚かなコードを試しました:

[MTAThread]
        static void Main()
        {
            Application.Run(new Tasks());
            Application.Exit();
        }

終了時にブレークポイントを設定します。アプリケーションを実行してからウィンドウを閉じると、ブレークポイントに到達します。アプリケーションを実行してから別のウィンドウを開いた場合:

private void questButton_Click(object sender, EventArgs e)
        {
            QuestionnairesWindow questWindow = new QuestionnairesWindow();
            questWindow.Show();
            this.Hide();
}

その後、最初のウィンドウに戻ります。

private void backButton_Click(object sender, EventArgs e)
        {
            Tasks tasksWindow = new Tasks();
            tasksWindow.Show();
            this.Close();
        }

最初のコードを最初と同じ方法で閉じると、Apllication.exit()コードに到達することはなく、アプリケーションが実際には閉じられていない(再度開くことができない)という印象を受けます。説明が複雑な場合は申し訳ありません

編集:質問は-なぜそれが異なって振る舞うのかという考えはありますか?

4

3 に答える 3

2

new Tasks()inMain()は と同じオブジェクトではありませんTasks tasksWindow = new Tasks();

Tasks の 2 つのオブジェクトを取得したので、2 番目に閉じます。1 番目はまだ存在し、死ぬことはありません。QuestionnairesWindow current の参照に渡す必要がありますTasks

QuestionnairesWindow追加のコンストラクターでそれを行うことができます:

private Tasks tasks;

public QuestionnairesWindow(Tasks t)
{
  this.tasks = t;
}

使用:

new QuestionnairesWindow(this).Show(); // where this = current `Tasks` created in `Main`
于 2009-01-26T10:41:21.700 に答える
0

この行が問題のようです:

Tasks tasksWindow = new Tasks();

あなたのコードを正しく理解していれば、backButton_Click で、最初に非表示にしたものを表示するのではなく、Tasks フォームの新しいインスタンスを作成しています。これは、まだ 1 つのウィンドウが開いているが非表示になっているため、アプリケーションが終了しないことを意味します。

おそらくやりたいことは、Tasks フォーム参照を QuestionnairesWindow フォームに渡すことです。

于 2009-01-26T10:40:57.283 に答える
0

問題は、backButton_Clickで [タスク] ウィンドウの新しいインスタンスを作成していることです。元の [タスク] ウィンドウはまだ実行されていますが、非表示になっています。元の Tasks フォームへの参照を QuestionnairesWindow に渡して、再度表示するように選択できるようにする必要があると思います。

QuestionnairesWindow に public/internal メソッドを追加する必要があります。ここで、どの Tasks フォームで QuestionnairesWindow を開くかを設定します。this.Hide() を呼び出す前に、 this参照を使用して questButton_Click でこのメソッドを呼び出します。この参照は QuestionnairesWindow 内のプライベート変数に格納されます。

次に backButton_Click で、このプライベート変数を使用して .Show() メソッドを呼び出し、親フォームを表示します。

于 2009-01-26T10:42:03.710 に答える