2017-04-22 117 views
0

我在Windows窗體上有一個Start和一個Done按鈕,並且我有車輛存儲在一個列表中。c# - 在方法中調用button_click事件處理程序

private void btnStart_Click(object sender, EventArgs e) { 
     Start(); 
    } 

private void Start() { 
    for (int i = 0; i < vehicles.Count; i++) { 
       txtLicensePlate.Text = vehicles[i].LicensePlate; 
    } 

所以通過點擊開始按鈕,使txtLicensePlate文本顯示該車的車牌號碼一個接一個。 但是,在從車牌號移動之前,我希望for循環等待點擊按鈕。

 private void btnDone_Click(object sender, EventArgs e) { 
     Add(); 
    } 

我試圖調用事件處理程序是這樣的:

private void Start() { 
    for (int i = 0; i < vehicles.Count; i++) { 
       txtLicensePlate.Text = vehicles[i].LicensePlate; 
    btnDone_Click(sender, e); 
    } 

但我得到一個錯誤信息說,該「發件人和電子郵件不會在當前的背景下存在」。 而另一方面,它似乎我想循環觸發按鈕點擊它自己(這不是我的意圖),這導致我的問題:

如何使循環等待一個按鈕點擊用戶?

編輯:看起來像我造成了一點困惑,所以我想澄清一下: 開始按鈕將啓動顯示第一個車牌號碼的循環。然後,用戶可以「告訴」當前車輛是否會跑步,並且如果它將運行多少公里。當用戶點擊完成按鈕時,公里數將被添加到車輛,並且應該顯示下一個車牌號碼。

+0

我不確定我是否理解您的目標 - 您希望啓動按鈕開始顯示您的列表中的車牌號碼。它會顯示第一個,然後等待用戶單擊完成,然後單擊完成後會顯示下一個。那是對的嗎? – pstrjds

+0

好的 - 進一步閱讀,是你會顯示第一個板塊,用戶點擊完成,這會調用「Add」方法,然後顯示下一個板塊編號? 「添加」方法是否涉及UI中的任何內容(我假定它將從文本框中讀取)? – pstrjds

+0

是的,你猜對了。 「開始」按鈕將啓動顯示第一個車牌號碼的循環。然後,用戶可以「告訴」當前車輛是否會跑步,並且如果它將運行多少公里(通過文本框)。當用戶點擊「完成」按鈕時,公里數量將被添加到車輛,並且應該顯示下一個車牌號碼。 – DewSee

回答

1

我會猜測回答我認爲你正在嘗試做的事情。

編輯根據您對問題的更新,這可能是我如何解決問題。有一點需要注意,一旦開始循環車輛,您可能需要禁用start按鈕。您可以在btnStart_Click事件處理程序中執行此操作。根據您的目標,您可能想要使用重置按鈕或列表結束時重新啓用它的方法。我不知道在達到這一點時想要發生什麼,所以我更新了done處理程序代碼以檢查列表的結尾,但是當到達列表的末尾時,您需要確定執行什麼操作。

而不是在Start按鈕代碼中有一個循環,有Start方法只是將初始字符串放入TextBox。您只需要將當前位置存儲在列表中,然後您可以從Done按鈕更新下一個車牌。

private int _currentVehicleIndex; 

private void btnStart_Click(object sender, EventArgs e) { 
    txtLicensePlate.Text = vehicles[0].LicensePlate; 
    _currentVehicleIndex = 1; 
} 

private void btnDone_Click(object sender, EventArgs e) { 
    Add(); 
    if (_currentVehicleIndex < vehicles.Count) 
    { 
     txtLicensePlate.Text = vehicles[_currentVehicleIndex].LicensePlate; 
     _currentVehicleIndex++; 
    } 
    else 
    { 
     // Handle the case where we have reached the end of the list 
     // clear the license plate text, reset form, etc... 
    } 
} 
+0

根據你的預編碼,我一直在想這樣的事情。在列表結束後,用戶將有機會重新開始(以「新路線」發送車輛),或者只是簡單地完成工作。在後一種情況下,UI將顯示關於車輛及其路線的一些基本信息。你的代碼原來是一個不同的解決方法,但正是我需要的,謝謝! – DewSee

2

您應該致電ButtonPerformClick方法。

這就是說,爲什麼不在Start方法的末尾調用Add方法?這就是你真正想要達到的效果,點擊btnDone只是達到目的的一種手段,爲什麼不直接走到最後而不是試圖人爲調用手段呢?

+0

你是對的,我忘了提及一些東西。簡而言之,應用程序會詢問選定的車輛是否會跑出去,如果有的話,會有多少km-s。因此,在用戶看到車牌號碼後,他/她可以檢查複選框以確定車輛是否將被使用,然後指定他的公里數量。這就是爲什麼我需要循環等待,因爲Add()中的值是由用戶爲每輛車提供的。 – DewSee