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);
}
但我得到一个错误信息说,该“发件人和电子邮件不会在当前的背景下存在”。 而另一方面,它似乎我想循环触发按钮点击它自己(这不是我的意图),这导致我的问题:
如何使循环等待一个按钮点击用户?
编辑:看起来像我造成了一点困惑,所以我想澄清一下: 开始按钮将启动显示第一个车牌号码的循环。然后,用户可以“告诉”当前车辆是否会跑步,并且如果它将运行多少公里。当用户点击完成按钮时,公里数将被添加到车辆,并且应该显示下一个车牌号码。
我会猜测回答我认为你正在尝试做的事情。
编辑根据您对问题的更新,这可能是我如何解决问题。有一点需要注意,一旦开始循环车辆,您可能需要禁用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...
}
}
根据你的预编码,我一直在想这样的事情。在列表结束后,用户将有机会重新开始(以“新路线”发送车辆),或者只是简单地完成工作。在后一种情况下,UI将显示关于车辆及其路线的一些基本信息。你的代码原来是一个不同的解决方法,但正是我需要的,谢谢! – DewSee
您应该致电Button
的PerformClick
方法。
这就是说,为什么不在Start
方法的末尾调用Add
方法?这就是你真正想要达到的效果,点击btnDone
只是达到目的的一种手段,为什么不直接走到最后而不是试图人为调用手段呢?
你是对的,我忘了提及一些东西。简而言之,应用程序会询问选定的车辆是否会跑出去,如果有的话,会有多少km-s。因此,在用户看到车牌号码后,他/她可以检查复选框以确定车辆是否将被使用,然后指定他的公里数量。这就是为什么我需要循环等待,因为Add()中的值是由用户为每辆车提供的。 – DewSee
我不确定我是否理解您的目标 - 您希望启动按钮开始显示您的列表中的车牌号码。它会显示第一个,然后等待用户单击完成,然后单击完成后会显示下一个。那是对的吗? – pstrjds
好的 - 进一步阅读,是你会显示第一个板块,用户点击完成,这会调用“Add”方法,然后显示下一个板块编号? “添加”方法是否涉及UI中的任何内容(我假定它将从文本框中读取)? – pstrjds
是的,你猜对了。 “开始”按钮将启动显示第一个车牌号码的循环。然后,用户可以“告诉”当前车辆是否会跑步,并且如果它将运行多少公里(通过文本框)。当用户点击“完成”按钮时,公里数量将被添加到车辆,并且应该显示下一个车牌号码。 – DewSee