Почему этот метод выполняется дважды каждый раз, когда я его вызываю? - PullRequest
0 голосов
/ 16 апреля 2010

У меня есть следующий метод, который выполняется дважды при каждом вызове:

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;

Во второй раз он выполняет весь код. Что случилось?

1 Ответ

0 голосов
/ 16 апреля 2010

Когда вы присваиваете CurrentRepositoryNumber в текстовом поле, это, вероятно, запускает обработчик событий, который снова вызывает эту функцию. Это кажется вероятным, поскольку имя свойства предполагает, что оно контролирует текущий репозиторий, который этот метод затем каким-либо образом отображает.

Возможно, вы захотите временно исключить, присвоить свойству, а затем повторно включить этот обработчик событий. Или, может быть, вам нужно больше перепроектировать, чтобы прояснить обязанности - часто с графическими структурами, которые сложно сделать, и самый простой вариант - просто исключить из списка, назначить, повторно зарегистрировать, с этим типом шаблона:

textBox.TextChange -= YourHandler;
textBox.Text = newValue;
textBox.TextChange += YourHandler;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...