【发布时间】:2014-10-20 20:51:18
【问题描述】:
我正在开发 .Net 紧凑型框架。 根据要求,我们有下拉和文本框; 当用户从下拉列表中选择值时,选择的索引更改事件会触发并且值在文本框中更新。 现在假设用户在文本框中输入了值,那么我们需要再次设置下拉选择索引。
所以在上面的场景中它进入了递归。
请帮我解决这个问题。
【问题讨论】:
标签: .net
我正在开发 .Net 紧凑型框架。 根据要求,我们有下拉和文本框; 当用户从下拉列表中选择值时,选择的索引更改事件会触发并且值在文本框中更新。 现在假设用户在文本框中输入了值,那么我们需要再次设置下拉选择索引。
所以在上面的场景中它进入了递归。
请帮我解决这个问题。
【问题讨论】:
标签: .net
我想到了两个简单的解决方案:
a) 旗帜
使用一个简单的变量_preventRecursion 来指示应该进行哪个更新,例如:
private volatile bool _preventRecursion;
public void TextBox_TextChanged(...)
{
if (!_preventRecursion)
{
_preventRecursion = true;
try
{
// Do stuff to update the combo box.
}
finally
{
_preventRecursion = false;
}
}
}
将相同的代码添加到组合框的事件处理程序中。
b) 手动附加事件处理程序
如果您在代码中手动附加事件处理程序,您可以控制事件何时可用:
public void TextBox_TextChanged(...)
{
comboBox1.SelectedIndexChanged -= selectedIndexChangedEventHandler;
try
{
// Do stuff to update the combo box
}
finally
{
comboBox1.SelectedIndexChanged += selectedIndexChangedEventHandler;
}
}
selectedIndexChangedEventHandler 是合适的代表。
【讨论】: