C #: событие TextChanged элемента управления, не запускающего «назначить»

2

Хорошо, вот сделка.

У меня есть график, который "прослушивает" текстовые поля некоторых меток и отображает их значения. Он делает это, добавляя значения в событие TextChanged.

Проблема: TextChanged только срабатывает, когда текст действительно изменился (очевидно), а не когда ему было присвоено новое значение.

Что мне нужно: Способ обнаружения, если текстовое поле метки было обновлено (присвоено), и все, с чем я должен работать, - это ссылка на элемент управления (например, ярлык).

Я понимаю, что TextChanged не был разработан для этого, поэтому мне интересно, встретил ли кто-нибудь из вас подобную проблему и нашел решение для нее.

Теги:

3 ответа

2

Причина, по которой ваш обработчик события TextChanged не вызывается при первоначальном назначении текста, заключается в том, что он прикреплен после того, как был назначен первый текст (по умолчанию разработчик делает что-то в этом порядке). Я бы сделал следующее:

  • TextChanged вызывает другой метод (UpdateGraph)
  • UpdateGraph собирает необходимые данные и обновляет график
  • Вызовите UpdateGraph как последнее, что произошло при загрузке формы

Это позволит убедиться, что график обновлен с начальными значениями. Важно, чтобы этот вызов произошел после вызова InitializeComponent.

1

В "сеттерах" довольно распространенная практика игнорировать тривиальные изменения, например:

public int Foo {
    get {return foo;}
    set {
        if(foo != value) {
            foo = value;
            OnFooChanged();
        }
    }
}

Если Text ведет себя так, и вы полагаетесь на все обновления, вызывающие событие, тогда он может работать не так, как вы хотите. Я, вероятно, попытаюсь найти другой способ сделать то, что вы хотите; возможно, используя промежуточный объект, который передает значения через.

0

Вы можете создать свой собственный элемент управления, который наследуется от этого элемента управления, и создать собственное свойство Text, которое будет запускать событие при назначении нового значения.

  • 0
    Если вы имеете в виду override , то хорошо; но если «создать свой» означает new Text {...} , то это было бы плохо ...
  • 0
    Слишком рано для меня;), но да - переопределить

Ещё вопросы

Сообщество Overcoder
Наверх
Меню