有3个自定义控件:a,b,c当焦点在 a,b之间转移的时候,不做限制
当用户企图将焦点移至c的时候,判断a.Text和b.Text是否相等,如果不相等则将焦点移到原来的控件。
以下代码有毛病:c_Enter(...)
{
if(b.Text!=a.Text)a.Focus();
}当我在窗体上的c的Enter事件中把焦点设到a上去时,c无法正确触发Leave事件,而c内部响应了Enter和Leave事件!请各位指教这种情况下应该怎么办?

解决方案 »

  1.   

    不明白你说的c的LEAVE事件,怎么会触发c的leave事件呢?
      

  2.   

    多加一句:
    a.Select();看看
    if(b.Text!=a.Text)
    {
    a.Focus();
    a.Select();
    }
      

  3.   

    你是说你调用a.Focus()时要触发c的Leave事件??
      

  4.   

    我帖一下代码:先编译一下,再在窗体上放2个MyBox控件,再取消myBox2_Enter的注释。运行起来,用鼠标点一下myBox2,就会看到离奇的事情了...    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        //private void myBox2_Enter(object sender, EventArgs e){myBox1.Focus();}
        }    class MyBox:TextBox
        {
            public MyBox()
            {
                this.Enter += new EventHandler(MyBox_Enter);
                this.Leave += new EventHandler(MyBox_Leave);
            }        void MyBox_Leave(object sender, EventArgs e){this.Text += "L";}        void MyBox_Enter(object sender, EventArgs e){this.Text += "E";}
        }
      

  5.   

    没什么离奇的啊,和预期的一样。
    两个控件都是MyBox。
    如果初始时焦点在第一个控件上面,然后把焦点移到第二个控件上,肯定会先触发第一个控件的Leave事件然后触发第二个控件的Enter事件。
    LZ是不是想不通没实现第一个的Leave事件怎么也会触发呢,因为MyBox类中实现了MyBox_Leave,所有继承MyBox的控件在Leave时都会先触发基类也就是MyBox的Leave事件,再触发自己实现的Leave事件。
    事件实际上是MultiDelegate,是可以+的,有个列表维护事件,所有+过的事件都会发生,所以即使自己不实现事件,但是基本实现了这个事件,也会发生该事件。