由于某种未知原因,click事件函数被意外地调用了多次

本文关键字:意外 调用 函数 事件 未知 于某种 click | 更新日期: 2023-09-27 17:49:39

下面是listbox 3的点击事件。问题是,如果我不包括listbox3.Visible=falselistbox3.click事件处理程序它工作得很好。但是如果我将它包含在代码中,它可以很好地从lisbox3中进行第一次选择,但对于进一步的选择,它会被调用多次。我试图改变listbox3.visible=false声明的位置,但它一直显示相同的行为。如果我加上listBox3。Click -= new eventandler (listBox3_Click);在lisbox3.click()的末尾,它可以正常工作。但是我仍然不能理解多次调用click事件处理程序的原因。请帮助

private void Heading_or_project_Click(object sender, EventArgs e)
{
    listBox3.Visible = true;
    listBox3.Click += new EventHandler(listBox3_Click);
}
public void listBox3_Click(object sender, EventArgs e)
{
        listBox3.Visible = false;
        int i = listBox3.SelectedIndex;
        switch (i)
        {
            case 0: button1_Click(sender, e);
                break;
            case 1: new_heading_just_created = 1;
                    Heading next_heading = new Heading();
                    next_heading.per_topic_button.TabIndex = heading_wise.Count;
                    next_heading.per_topic_button.Click += new EventHandler(per_topic_button_Click);

                    flowLayoutPanel2.Controls.Add(next_heading.head);
                    heading_wise.Add(next_heading);
                break;
            default:
                break;
        }

由于某种未知原因,click事件函数被意外地调用了多次

问题出在这几行:

next_heading.per_topic_button.Click += new EventHandler(per_topic_button_Click);

listBox3.Click += new EventHandler(listBox3_Click);

您应该从表单Load事件中调用它,而不是在这里。因为每次调用这些方法(listBox3_ClickHeading_or_project_Click)时,您都会再次添加相同的处理程序,因此它会被执行多次。