我有以下方法,每次调用时都执行两次:
public static void ChangeToRepository(RepositoryTextBox textBox, int repositoryNumber)
{
MessageBox.Show("you");
int indexOfLastRepository = (textBox.RepositoryCollection.Count - 1);
if (repositoryNumber > indexOfLastRepository)
{
AddTextRepositoriesThrough(textBox, repositoryNumber, indexOfLastRepository);
}
textBox.RepositoryCollection[textBox.CurrentRepositoryNumber].CurrentText = textBox.Text;
textBox.PreviousRepositoryNumber = textBox.CurrentRepositoryNumber;
textBox.CurrentRepositoryNumber = repositoryNumber;
textBox.Text = textBox.RepositoryCollection[textBox.CurrentRepositoryNumber].CurrentText;
}
第一次执行该方法时,它会执行除最后一行之外的所有代码:
textBox.Text = textBox.RepositoryCollection[textBox.CurrentRepositoryNumber].CurrentText;
第二次,它执行所有代码。怎么了?
答案 0 :(得分:0)
当您在文本框中分配CurrentRepositoryNumber
时,它可能会触发一个再次回调此函数的事件处理程序。这似乎很可能是因为属性名称表明它控制着当前的存储库,然后该方法负责以某种方式显示。
您可能希望临时删除,分配给该属性,然后重新登记该事件处理程序。或者你可能需要更多的重新设计才能明确责任 - 通常使用很难做的GUI框架,而最简单的选择就是使用这种模式进行删除,分配,重新登记:
textBox.TextChange -= YourHandler;
textBox.Text = newValue;
textBox.TextChange += YourHandler;