c# - 在方法中调用 button_click 事件处理程序
c# - Invoke button_click event handler in a method
我在 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);
}
但是我收到一条错误消息,说 "sender and e does not exist in the current context"。
另一方面,我似乎希望循环自己触发按钮单击(这不是我的意图),这引出了我的问题:
如何让 for 循环等待用户点击按钮?
编辑:好像我引起了一点混乱,所以我想澄清一下:
Start 按钮将启动显示第一个车牌号的循环。然后用户可以 "tell" 如果当前车辆将行驶 运行,如果行驶多少公里 运行。当用户点击完成按钮时,公里数将添加到车辆中,并且应该显示下一个车牌号。
您应该调用 Button
的 PerformClick
方法。
也就是说,为什么不在 Start
方法的末尾调用 Add
方法呢?这就是您真正想要实现的目标,点击 btnDone
只是达到此目的的一种手段,所以为什么不直接走到最后而不是尝试人为调用手段呢?
我将猜测一下我认为你正在尝试做的事情。
编辑 根据您对问题的更新,这可能是我解决问题的方法。需要注意的一件事是,您可能希望在开始遍历车辆后禁用 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...
}
}
我在 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);
}
但是我收到一条错误消息,说 "sender and e does not exist in the current context"。 另一方面,我似乎希望循环自己触发按钮单击(这不是我的意图),这引出了我的问题:
如何让 for 循环等待用户点击按钮?
编辑:好像我引起了一点混乱,所以我想澄清一下: Start 按钮将启动显示第一个车牌号的循环。然后用户可以 "tell" 如果当前车辆将行驶 运行,如果行驶多少公里 运行。当用户点击完成按钮时,公里数将添加到车辆中,并且应该显示下一个车牌号。
您应该调用 Button
的 PerformClick
方法。
也就是说,为什么不在 Start
方法的末尾调用 Add
方法呢?这就是您真正想要实现的目标,点击 btnDone
只是达到此目的的一种手段,所以为什么不直接走到最后而不是尝试人为调用手段呢?
我将猜测一下我认为你正在尝试做的事情。
编辑 根据您对问题的更新,这可能是我解决问题的方法。需要注意的一件事是,您可能希望在开始遍历车辆后禁用 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...
}
}