我有一个简单的应用程序,可以将输入到其中一个文本框的任何文本在另一个文本框中反转显示。而且,你可以修改任意一个文本框,这些更改也会(字面上)反映在另一个文本框中。
我写了这段代码,认为它会引起问题。
private void realText_TextChanged(object sender, EventArgs e)
{
mirrorText.Text = mirror(realText.Text);
}
private void mirrorText_TextChanged(object sender, EventArgs e)
{
realText.Text = mirror(mirrorText.Text);
}
private string mirror(string text)
{
return new string(text.Reverse().ToArray()).Replace("\n\r", "\r\n");
}
我接着尝试了它,因为我认为它会导致一个无限循环(realText
改变 mirrorText
,另一个事件发生,mirrorText
改变 realText
,以此类推)。然而,除了预期的行为外,什么都没有发生。
当然,我对此感到非常高兴,我可以把它留在这里。 但我真的可以吗?
我非常确定 TextChanged
事件应该在每次更改 Text
时触发。这是事件中某种错误保护的意图,还是我只是幸运而已?这段代码是否会在其他计算机、其他构建设置等情况下出现问题?这可以轻松解决:
private void realText_TextChanged(object sender, EventArgs e)
{
if (realText.Focused)
{
mirrorText.Text = Mirror(realText.Text);
}
}
为了安全起见,我可能会去做这件事,但是有必要检查吗?(我甚至不会问是否推荐。)