2

フォームにGet Statusボタンがあり、そのコードは現在次のようになっています。

private void btnGetStatus_Click(object sender, EventArgs e)
    {
        // Check if a runner has been selected
        if (lstRunners.SelectedIndex > -1)
        {
            // Obtain selected runner
            Runner selectedRunner = (Runner)lstRunners.SelectedItem;

            // Call the method in Runner class to get the runner's status
            selectedRunner.GetStatus(selectedRunner);
        }
    }
}
}

Runner私が持っているクラスで:

public void GetStatus(Runner selectedRunner)
    {
        if (selectedRunner.HasFinished == true)
        {
            lblRunnerInfo.Text = "Runner has already finished!";
        }
    }

私が基本的にやろうとしているのは、クラス内のメソッドをbtnGetStatus呼び出すことです。そのメソッドに実行させたいことは、基本的にブール値をチェックして、ランナーが終了したかどうかを確認することです。ランナーが終了した場合、反映するメッセージがありますこれとブール値がfalseの場合、基本的に「ランナーはまだ終了していません/終了していません」というメッセージを出力しますGetStatusRunnerHasFinishedlblRunnerInfo.Text

クラスからフォームコントロールにアクセスするのが適切な方法なのか、それとも実行できるのかはよくわかりませんが、希望どおりに実行する方法がわかりません(GetStatusメソッドを取得してランナーのステータスを確認するbtnGetStatusにコードを起動させるのではなく)。

4

4 に答える 4

0

次のように btnGetStatus_Click を変更できます。

private void btnGetStatus_Click(object sender, EventArgs e)
{
    // Check if a runner has been selected
    if (lstRunners.SelectedIndex > -1)
    {
        // Obtain selected runner
        Runner selectedRunner = (Runner)lstRunners.SelectedItem;
        // Call the method in Runner class to get the runner's Status
        // CHANGED
        if (selectedRunner.HasFinished)
            lblRunnerInfo.Text = "Runner has already finished";
    }
}

このように、フォームは出力を処理し、Runner クラスは「実行」を担当します。後でより複雑な Status Situation が発生した場合でも、HasFinished を確認するだけでなく、状態の列挙を追加して Status を取得できます。テキストを取得するには、Status 列挙から適切なテキストへのマッピングを追加する必要があります。

于 2013-11-01T20:26:12.157 に答える
0

HasFinished() プロパティに直接アクセスしないのはなぜですか?

    private void btnGetStatus_Click(object sender, EventArgs e)
    {
        // Check if a runner has been selected
        if (lstRunners.SelectedIndex > -1)
        {
            // Obtain selected runner
            Runner selectedRunner = (Runner)lstRunners.SelectedItem;

            // Call the method in Runner class to get the runner's status
            if (selectedRunner.HasFinished)
            {
                lblRunnerInfo.Text = "Runner has already finished!";
            }
            else
            {
                lblRunnerInfo.Text = "Runner has NOT finished yet!";
            }
        }
    }
于 2013-11-01T20:26:38.433 に答える
0

あなたが探しているのはこれだと思います:

lblRunnerInfo.Text = selectedRunner.GetStatus();

そしてランナークラスで:

public string GetStatus()
{
    if (this.HasFinished == true)
    {
        return "Runner has already finished!";
    }
    return "Finished";
}
于 2013-11-01T20:21:49.240 に答える