下面是列表框3的click事件。问题是,如果我在listbox3.Visible=false事件处理程序中不包含listbox3.click,它就可以正常工作。但是,如果我将其包含在代码中,则对于从lisbox3进行的第一次选择来说,它工作正常,但对于进一步的选择,它会被多次调用。我试图更改listbox3.visible=false语句的位置,但是它始终显示相同的行为。如果我加上
    listBox3.Click-=新的EventHandler(listBox3_Click);在lisbox3.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;
        }

最佳答案

问题是这些行:

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




listBox3.Click += new EventHandler(listBox3_Click);


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

10-04 14:31