gpt4 book ai didi

.net - TextChanged 事件 - 为什么这不会导致无限循环?

转载 作者:行者123 更新时间:2023-12-04 12:01:07 25 4
gpt4 key购买 nike

在尝试做一些更复杂的事情时,我遇到了一种我不太了解的行为。

假设下面的代码处理 textChanged 事件。

 private void textChanged(object sender, TextChangedEventArgs e)
{
TextBox current = sender as TextBox;
current.Text = current.Text + "+";
}

现在,在文本框中键入一个字符(例如 A)将导致事件跳闸两次(添加两个“+”),最终显示的文本仅为 A+。

我的两个问题是,为什么事件只发生了两次?为什么只有第一次运行事件实际上设置了文本框的文本?

提前致谢!

最佳答案

好吧 - 在更改时/刚刚更改时设置 Text 属性似乎被 TextBox 类明确捕获:

只需使用反射器查看内部 TextBox.OnTextPropertyChanged(缩短):

TextBox box = (TextBox) d;
if (!box._isInsideTextContentChange)
{
string newValue = (string) e.NewValue;
//...
box._isInsideTextContentChange = true;
try
{
using (box.TextSelectionInternal.DeclareChangeBlock())
{
//...
} //Probably raises TextChanged here
}
finally
{
box._isInsideTextContentChange = false;
}
//...
}

在引发 TextChanged 事件之前,字段 _isInsideTextContentChange 设置为 true。再次更改 Text 属性时,不会再次引发 TextChanged 事件。

因此:功能;-)

关于.net - TextChanged 事件 - 为什么这不会导致无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2898234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com