我正在开发.Net紧凑框架。 根据要求,我们有下拉和文本框; 当用户从下拉列表中选择值时,选择的索引更改事件触发并在文本框中更新值。 现在假设用户在文本框中键入了值,那么我们需要再次设置下拉列表选择索引。
所以在上面这个场景中,它进行了递归。
请帮我解决这个问题。
答案 0 :(得分:1)
我想到了两个简单的解决方案:
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
将成为合适的代表。