Хорошо, вот сделка.
У меня есть график, который "прослушивает" текстовые поля некоторых меток и отображает их значения. Он делает это, добавляя значения в событие TextChanged.
Проблема: TextChanged только срабатывает, когда текст действительно изменился (очевидно), а не когда ему было присвоено новое значение.
Что мне нужно: Способ обнаружения, если текстовое поле метки было обновлено (присвоено), и все, с чем я должен работать, - это ссылка на элемент управления (например, ярлык).
Я понимаю, что TextChanged не был разработан для этого, поэтому мне интересно, встретил ли кто-нибудь из вас подобную проблему и нашел решение для нее.
Причина, по которой ваш обработчик события TextChanged
не вызывается при первоначальном назначении текста, заключается в том, что он прикреплен после того, как был назначен первый текст (по умолчанию разработчик делает что-то в этом порядке). Я бы сделал следующее:
TextChanged
вызывает другой метод (UpdateGraph
)UpdateGraph
собирает необходимые данные и обновляет графикUpdateGraph
как последнее, что произошло при загрузке формыЭто позволит убедиться, что график обновлен с начальными значениями. Важно, чтобы этот вызов произошел после вызова InitializeComponent
.
В "сеттерах" довольно распространенная практика игнорировать тривиальные изменения, например:
public int Foo {
get {return foo;}
set {
if(foo != value) {
foo = value;
OnFooChanged();
}
}
}
Если Text
ведет себя так, и вы полагаетесь на все обновления, вызывающие событие, тогда он может работать не так, как вы хотите. Я, вероятно, попытаюсь найти другой способ сделать то, что вы хотите; возможно, используя промежуточный объект, который передает значения через.
Вы можете создать свой собственный элемент управления, который наследуется от этого элемента управления, и создать собственное свойство Text, которое будет запускать событие при назначении нового значения.
override
, то хорошо; но если «создать свой» означаетnew Text {...}
, то это было бы плохо ...