c#中的对象变量相当于c++中的指针,所以你可以用Button temp=new Button(); 创建多个对象,temp指向最后一个对象!
2 在"为控件添加事件”按钮后都有一句label1.Click+=new EventHandler(this.Test);  所以总是使得label1的事件处理多了一次!!
你说地第3各问题,我看不太明白,不知道说地是什么。
是不是要使label1.Click只有一次?那么就把label1.Click+=new EventHandler(this.Test); 放在外面或者家一个判断的变量!

解决方案 »

  1.   

    1。你没有为新加入的button设定Name属性。Name是空的,不过就算设定了,
    也可以添加。
    这里的Name只是设计名称,设计时不能重复,可能牵涉到编译什么的。
    运行时可以,恕我没时间深究:)2。那是因为你按button1时执行了:
    label1.Click+=new EventHandler(this.Test); 
    这样每次label1的EventHandler都会多一个,当然要多次执行this.Test的。
    3。简单解决办法:
      设一个标志,如果label1.Click已经加过处理函数了,就不要再加了。
      

  2.   

    to hendong(hendong)"c#中的对象变量相当于c++中的指针,所以你可以用Button temp=new Button(); 创建多个对象,temp指向最后一个对象!",按你的说法,应该只存在一个对象,但是按我看的,“其实已经有两个显示为“新增加的按钮”的按钮在窗体上,只是因为重复显示在同一位置看不到而已。”,不止一个对象。关于第二个问题,就算按你们的解释,为什么那个新增的按钮不会执行几次?
    temp.Click+=new EventHandler(this.Test);不也重复了几次?
    何况,对label1.Click+=new EventHandler(this.Test)这样的句子,我认为只是表明了一种关系,并不是有几句就会执行几次,取其最后一次罢了。第三个,我就是要加一个条件判断,让click只执行一次。我想比较click是否为null,不过做不到,只能用布尔值或int用于判断,很遗憾。
      

  3.   

    第二个问题
    因为你每次执行了Button temp=new Button(); 
    这样会建一个新的实例,所以每次都会增加一次按钮,
    如果你想只增加一次的话,应该将temp设为成员变量,然后代码如下写:
        if(temp==null)
        {
           temp = new Button(); 
           temp.Text="新增加的按钮"; 
           temp.Location=new Point(30); 
           temp.Click+=new EventHandler(this.Test); 
           this.Controls.Add(temp); 
        }
    第三个问题:
    在    label1.Click+=new EventHandler(this.Test); 
    之前先执行label1.Click-=new EventHandler(this.Test); 
      

  4.   

    你们没看清我的问题:
    1、到底增加几个按钮?我认为始终只有一个,前一个覆盖后一个,任何时刻都只有一个。2、label的事件会发生几次,那button的事件为什么又只有一次?3、我要求以label1.Click是否为null(或Test)进行判断,决定label1.click+=语句是否执行,可不可以做到?