2010-04-15 3 views
0

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

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

Можете ли вы показать немного больше кода? Где функция, вызываемая кодом? Может быть, этот фрагмент кода называется дважды (событие?)? – Sascha

+0

Пожалуйста, покажите все места, откуда это вызвано. –

+0

Вы вызываете ChangeToRepository Из обработчика событий? Который ? Покажите этот код. – nos

ответ

0

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

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

textBox.TextChange -= YourHandler; 
textBox.Text = newValue; 
textBox.TextChange += YourHandler; 
+0

Я забыл создать событие OnCurrentRepositoryNumberChanged, которое вызывает метод ChangeToRepository. Благодарю. – Justin

Смежные вопросы