c# - 在方法中调用button_click事件处理程序

问题描述:

我在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

我会猜测回答我认为你正在尝试做的事情。

编辑根据您对问题的更新,这可能是我如何解决问题。有一点需要注意,一旦开始循环车辆,您可能需要禁用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

您应该致电ButtonPerformClick方法。

这就是说,为什么不在Start方法的末尾调用Add方法?这就是你真正想要达到的效果,点击btnDone只是达到目的的一种手段,为什么不直接走到最后而不是试图人为调用手段呢?

+0

你是对的,我忘了提及一些东西。简而言之,应用程序会询问选定的车辆是否会跑出去,如果有的话,会有多少km-s。因此,在用户看到车牌号码后,他/她可以检查复选框以确定车辆是否将被使用,然后指定他的公里数量。这就是为什么我需要循环等待,因为Add()中的值是由用户为每辆车提供的。 – DewSee