0

ウンパスを狩っていて、問題が発生しました。(高校生です) トリビア教室を担当しているのですが、ここでおかしなことをしています。現在のコードでは、フォームを表示し、ユーザーに入力を求め、answerstatus を true/false に設定しています。与えられた答えに基づいて、別のクラスで正しい答えの数を数えてもらいたいです。私の質問は、ユーザーがウィンドウを閉じたときに、このクラスをカウントするにはどうすればよいですか?

public void passOrFailWumpusEncounter(bool result)
{
    if (currentTested == WUMPUS_TEST_AMOUNT)
    {
        return;
    }
    if(result)
    {
        currentPassed++;
        currentTested++;
    }
    else
    {
        currentTested++;
    }
}

私は「結果」を得ています

public bool getQuestionStatus()
{
    return questionStatus;
}

(別のクラスで)私は試しました

private void Form1_FormClosing(Object sender, FormClosingEventArgs e)
{
    trivia.passOrFailWumpusEncounter(prompt.getQuestionStatus());
}

しかし、それは近くでは何もしません!

4

3 に答える 3

4

私がよく理解していれば、ユーザーがウィンドウを閉じたときに(何かをカウントする)コードを実行したいのですか?

プログラム的には、初期化時に実行する必要があります (たとえば、フォームが読み込まれたとき)

form1.Close += ANewFunction;  // registering the handler

そしてハンドラ自体を書きます:

public void ANewFunction(EventsArg e)   { ... }

しかし、このような単純なケースでは、Visual Studio に面倒な作業を任せる必要があります。フォームのプロパティで、Close イベントをダブルクリックします (イベントを表示するにはプロパティ タブのボタンをクリックする必要がある場合があり、イベントが登録されます)。ハンドラーを form1.designer.cs に追加し、ユーザー コードに近いハンドラーのプロトタイプを作成します。

于 2012-04-09T22:13:21.923 に答える
0

After creating the form and showing it, it is still a live. So you can read the answer from that form in the calling function.

For example:

Form myForm = new Form();
myForm.ShowDialog();
if (myForm.CheckBox.Checked) //myForm still exists and you check it's state
{
    Console.Out.WriteLine("The answer is yes!");
}
于 2012-04-09T22:29:02.520 に答える
0

フォームのクローズをリッスンするイベントを見つけます。ハンドラーを作成し、正解数を設定する別のクラスのメソッドを呼び出すコードを記述します。これが詳細でない場合は、質問をより詳細にしてください...

于 2012-04-09T22:10:19.703 に答える