Странное поведение формы. Текст появляется только в текстовом поле иногда после установки свойства Текст - PullRequest
0 голосов
/ 23 декабря 2011

В vb6 вы могли видеть обновление текстового поля сразу после изменения значения, но я заметил в .net, что оно не будет обновляться до тех пор, пока не завершится метод, в котором вы находитесь. Предварительный вопрос, который у меня есть, заключается в том, есть ли способ обновить текстовое поле до завершения метода.

Проблема в том, что у меня есть два текстовых поля, свойства текста которых установлены, и когда метод завершается, только одно из них постоянно обновляется на экране. Другой обычно не делает, но иногда делает. Это очень время от времени. Я буквально позвонил кому-то, чтобы убедиться, что я не принимаю сумасшедшие таблетки, и, конечно, он начал работать, когда она пришла (хотя я не внес никаких изменений в код). Затем, когда парень QA пришел в себя, он снова перестал работать (опять же, не вносил никаких изменений в код).

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

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

Редактировать: Я бы опубликовал фрагмент кода, но фрагмент, который я хотел опубликовать, не воспроизводит проблему, и я не выделил проблему в достаточно небольшой раздел кода, чтобы ее было удобно разместить. Я добавлю немного больше информации, хотя:

После завершения метода, который обновляет эти текстовые поля, элемент управления возвращается в форму. Других процессов не происходит. Я продолжал думать, что, возможно, какой-то код запускался где-то, что скрывало текстовое поле, но тщательный просмотр кода подтвердил, что это определенно не тот случай ... когда метод завершается, больше ничего не происходит.

Я заметил, когда я отлаживал, что иногда он будет работать должным образом, а в редких случаях он даже будет работать должным образом при нормальной работе. Я добавил DoEvents (), чтобы посмотреть, будет ли он работать, и это сработало в первый раз ... но затем не продолжал работать. Из-за разочарования я добавил повторные вызовы, чтобы установить текстовое поле и DoEvents () после каждого, и это не сделало его идеальным. Наконец, я добавил вызов для потока в Sleep () на 300 миллисекунд, и теперь он кажется лучше.

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

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Полагаю, вы могли бы добавить: Application.DoEvents() после установки значения текстового поля. Обычно не одобряется использование DoEvents, хотя это может решить вашу проблему в промежуточном звене.

0 голосов
/ 23 декабря 2011

я думаю, что вам лучше использовать Invalidate(); это приведет к перерисовке элемента управления yourtextbox.Invalidate();

вы можете использовать Threading для этой цели

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...