我在Windows窗体上有一个“开始”和“完成”按钮,我将车辆存储在列表中。
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);
}
但是我收到一条错误消息说,&#34;发件人和e在当前上下文中不存在&#34;。 而另一方面,似乎我希望循环触发按钮点击它自己(这不是我的意图),这导致我的问题:
如何使for循环等待用户点击按钮?
编辑:似乎我引起了一些混乱,所以我想澄清一下: “开始”按钮将启动显示第一个车牌号码的循环。然后用户可以告诉&#34;如果当前的车辆将要运行,并且它将运行多少公里。当用户点击完成按钮时,将向车辆添加公里数,并显示下一个车牌号码。
答案 0 :(得分:2)
您应该调用PerformClick
的{{1}}方法。
那就是说,为什么不在Button
方法结束时调用Add
方法呢?这就是你真正想要实现的目标,点击Start
只是达到目的的一种手段,为什么不直接走到尽头而不是试图人为地调用手段呢?
答案 1 :(得分: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...
}
}