【发布时间】:2015-01-16 20:11:07
【问题描述】:
我有一个简单的应用程序,可以反转在另一个文本框中键入的任何文本。问题是,您可以修改任一文本框,并且更改将(字面上)反映在另一个文本框中。
我写了这段代码,相信它会引起问题。
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);
}
}
为了安全起见,我可能还是会这样做,但是否需要检查? (我什至不会问是否推荐。)
【问题讨论】:
-
我很确定 TextChanged 事件仅在从 UI 而非代码更改文本时触发。
-
来自 MSDN 的@Magnus:如果 Text 属性被编程修改或用户交互更改,则会引发此事件。
-
@Magnus,您可以使用 Reflector(我想这就是它的名称,对吗?或者 JetBrains 的...呃...记不起名字了)来检查一下!
-
将
Text设置为已有的值可能不会触发TextChanged事件,因为它实际上并没有改变。 -
@Marton,IDE 内的文档也说
Event raised when the value of the Text property is changed on Control。
标签: c# .net winforms events textchanged