有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事件!请各位指教这种情况下应该怎么办?
当用户企图将焦点移至c的时候,判断a.Text和b.Text是否相等,如果不相等则将焦点移到原来的控件。
以下代码有毛病:c_Enter(...)
{
if(b.Text!=a.Text)a.Focus();
}当我在窗体上的c的Enter事件中把焦点设到a上去时,c无法正确触发Leave事件,而c内部响应了Enter和Leave事件!请各位指教这种情况下应该怎么办?
a.Select();看看
if(b.Text!=a.Text)
{
a.Focus();
a.Select();
}
{
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";}
}
两个控件都是MyBox。
如果初始时焦点在第一个控件上面,然后把焦点移到第二个控件上,肯定会先触发第一个控件的Leave事件然后触发第二个控件的Enter事件。
LZ是不是想不通没实现第一个的Leave事件怎么也会触发呢,因为MyBox类中实现了MyBox_Leave,所有继承MyBox的控件在Leave时都会先触发基类也就是MyBox的Leave事件,再触发自己实现的Leave事件。
事件实际上是MultiDelegate,是可以+的,有个列表维护事件,所有+过的事件都会发生,所以即使自己不实现事件,但是基本实现了这个事件,也会发生该事件。