我窗体上有2个按钮:确定和取消,若干其他控件,其中textBox挂了leave事件,但是我不想在点击取消按钮时触发leave事件该怎么做?

解决方案 »

  1.   

    textBox.Leave -= 你的事件;
      

  2.   

    你使用TextBox的Validating事件会好些~~~~~
      

  3.   

    没试过,你可以先跟踪一下,看是先触发按钮的点击事件还是先触发textBox的leave事件,如果是先触发按钮的点击事件就简单了,设一个全局的布尔属性,点击按钮时改变属性值为真(或假),在leave事件中判断如果为真(或假)的条件是真的话就直接return就OK了。不过应该是先触发leave事件的,这样的话暂时还没想出什么好办法,等高手来或等我想想吧,呵呵。
      

  4.   

    比较笨的办法
    public bool isClieck =true;
    然后在"取消"里面 isClieck=false;
    最后在TextBox.leave事件中加个判断
    if(isCheck)
    {
    //执行你要的事件
    }
      

  5.   

    public class MyButton : TextBox
        {
            public MyButton() 
                :base()
            {        }
            protected override void OnLeave(EventArgs e)
            {
                return;
                //base.OnLeave(e);
            }
        }
    自己重载控件,然后将Leave事件去除就行了,这个还会触发Leave,但是,这样重载后leave事件就什么都不做了
      

  6.   

    我的思路首先是在Leave事件里面判断是不是点的取消按钮,如果不是再执行代码!不知道可不可行?不行再想办法!
      

  7.   

    在这里,无论点击落那个按钮,都会先执行textBox的leave事件,
    可以在取消按钮的mouse enter 和mouse level事件里做处理. private void button_cancel_MouseEnter(object sender, EventArgs e)
            {
                this.textBox1.Leave -= new System.EventHandler(this.textBox1_Leave);
            }        private void button_cancel_MouseLeave(object sender, EventArgs e)
            {
                this.textBox1.Leave += new System.EventHandler(this.textBox1_Leave);
            }
      

  8.   

    要看Leave 和Cancel button Click 那个事件先触发,再采取相应的解决办法。
      

  9.   


    当然是先Leave  , 再Cancel button Click .
      

  10.   

    虽然你已经结贴了。但我还要更给一个更好的方法。
    你把取消按钮的CausesValidation的属性改成false,然后用TEXTBOX的textBox1_Validating事件,这个事件比LEAVE事件高级。
      

  11.   

    不过我发现这个方法,有个问题。就是在FormClosing的事件里不行。我在微软的网站上说。好像是BUG。正在处理当中。
    还是textBox的leave事件里面做,在前面加上一句话
                    if (btnCancel.Focused)
                    {
                        return;
                    }
    这样就好了。