button1、button2已经写了button1_Click事件
要求:如果button2的Text变成"aaaa",就触发button1_Click事件,请问,该怎么写
谢谢!!

解决方案 »

  1.   

    用button2的TextChanged事件        private void button2_TextChanged(object sender, EventArgs e)
            {
                if (button2.Text == "aaaa")
                    button1_Click(button2, e);
            }
      

  2.   

    button1_Click(button2, e)也可替换为button1.PerformClick(),后者在你没有定义button1_Click方法时依然可以使用。
      

  3.   

    private void button2_TextChanged(object sender, EventArgs e)
    {
    if (button2.Text == "aaaa")
    button1_Click(button1, e);
    }
    或者将button1的click事件方法内的代码做成一个独立的方法,button1_Click和button2_TextChanged内都调用这个方法。
      

  4.   

    Button本身没有TextChanged事件。你可以自己扩展一个。public class MyTextHandledButton:Button
    {
        public event EventHandler TextChanged;
        public new Text
        {
            get{return base.Text;}
            set
            {
                base.Text=value;
                if(TextChanged!=null) TextChanged(this,new EventArgs());
            }
        }
    }
    使用这个,在TextChanged事件中写代码判断button2.Text即可。
      

  5.   

    也可以这样
        class MyButton : Button
        {
            public override string Text {
                get { return base.Text; }
                set {
                    base.Text = value;
                    if (base.Text == "aaaa") base.PerformClick();
                }
            }
        }
    这样改,你只要改一下new的地方
    Button button1=new MyButton();
      

  6.   

    当buton2的Text赋为"aaaa"的时候调用button1_Click即可:this.button2.Text = "aaaa";
    this.button1_Click(button1, new EventArgs());当然你也可以像4楼和5楼那样封装一下
      

  7.   

    button是有textchanged事件的,当然,这可能和.net版本有关,我这边是4.0
      

  8.   

    和版本没关系,TextChanged 从1.0 就有Button 从 Control 继承,也有此事件
      

  9.   


    上面那个是对的,下面来提提我的理解来完善下,错了请指正。
    public class MyTextHandledButton:Button
        {
            public event EventHandler TextChanged;
            public new Text
            {
                get{return base.Text;}
                set
                {
                    //比较一下是否值不同了,因为事件本身就是只在值改变时发生
                    if(base.Text!= value)
                    {
                        base.Text=value;
                        //事件发生
                        if(TextChanged != null)
                        {
                            //为了让所有注册的事件发生
                            foreach (Delegate del in ddd.GetInvocationList())
                            {
                                //如果是控件的,就直接Invoke,省的出现跨线程访问出错
                                System.Windows.Forms.Control c = del.Target as System.Windows.Forms.Control;
                                if (del != null) c.Invoke(del, new object[] { this, EventArgs.Empty });
                                else TextChanged(this, EventArgs.Empty);
                            }
                        }
                    }
                }
            }
        }还有,最好不要直接在TextChanged事件的处理中直接用button1_Click(),因为这样不易程序的阅读,代码的维护。尤其是事件发生对象已经改变,参数也不对了。应该把button1_Click事件中的方法独立一个方法,然后在TextChanged事件中使用独立出来的方法。
    如  
    private void button2_TextChanged(object sender, EventArgs e)
    {
         button1_Click(button2, e);
    }
    这样是不好的。最好是:
    private void button1_Click(object sender, EventArgs e)
    {
         DoSomeThing(object[] param);
    }//把具体的方法独立出来调用
    private void DoSomeThing(params object param)
    {
        //some thing
    }private void button2_TextChanged(object sender, EventArgs e)
    {
         DoSomeThing(object[] param);
    }
      

  10.   

    谢谢各位,我只是想得到一个通用的方法,不仅仅是button2的Text属性改变,就触发button1_Click事件,还有,比如button2的背景颜色改变....或者等等条件,那么,就触发button1_Click事件