簡體   English   中英

從類訪問表單控件?

[英]Accessing a form control from a class?

我的表單上有一個“ 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!";
        }
    }

我基本上想做的是讓btnGetStatusRunner類中調用GetStatus方法,然后我想要該方法做的就是基本上檢查布爾值HasFinished以查看跑步者是否完成,是否已經完成, lblRunnerInfo.Text有一條消息可以反映這一點,如果布爾值是false,則基本上輸出一條消息,說“ Runner尚未完成/尚未完成”。

我不太確定從類訪問表單控件是否是正確的做法,或者甚至可以做到,但是我不確定如何按照自己的方式進行操作(獲取GetStatus方法以檢查控件的狀態)。運行程序,而不是讓btnGetStatus觸發代碼。)

我認為您正在尋找的是:

lblRunnerInfo.Text = selectedRunner.GetStatus();

然后在跑步類中:

public string GetStatus()
{
    if (this.HasFinished == true)
    {
        return "Runner has already finished!";
    }
    return "Finished";
}

您可以如下更改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類負責“運行”。 如果以后您的狀態狀況更為復雜,則仍然可以為狀態添加枚舉並檢索狀態,而不僅僅是檢查HasFinished。 要檢索文本,您需要添加一個從Status枚舉到適當文本的映射。

為什么不直接訪問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!";
            }
        }
    }

這樣的事情怎么樣

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
        lblRunnerInfo.Text = selectedRunner.GetStatus(selectedRunner);
    }

}

然后將您的GetStatus設置為字符串

public string GetStatus(Runner selectedRunner)
{
    if (selectedRunner.HasFinished == true)
    {
        return "Runner has already finished!";
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM