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

时间:2017-04-22 15:52:56

标签: c# for-loop buttonclick eventhandler

我在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;如果当前的车辆将要运行,并且它将运行多少公里。当用户点击完成按钮时,将向车辆添加公里数,并显示下一个车牌号码。

2 个答案:

答案 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...
    }
}