Как заставить текстовое поле обновить свой текст

Итак, я просмотрел от пяти до десяти вопросов о stackoverflow о размещении текста в текстовом поле с помощью ряда команд. Я пробовал SetWindowText, SendMessage с EM_SETSEL и EM_REPLACESEL, а также несколько других, которые я не могу придумать в голове. По большей части мне это удавалось, за исключением одного странного случая.

Когда я устанавливаю текст этого конкретного текстового поля, ничего не появляется, ничего не меняется. Сначала подумал, что не правильно устанавливаю данные. Однако, когда я использую Spy++ или Wspector для просмотра текста текстового поля, правильные данные с моими изменениями находятся там, но не отображаются в фактическом текстовом поле. Еще более странно, когда я возвращаюсь к форме с текстовым полем, которое я «редактировал», данные spy++ и Wинспекции меняются на то, что отображается в текстовом поле.

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

Если у кого-то есть какие-либо предложения, я был бы очень признателен.

Редактировать: Хорошо, поэтому я еще немного покопался в том, что вызывает проблему с изменением текста. Я открыл Wspector и заставил его смотреть текстовое поле. Оттуда я смог идентифицировать сообщения, отправленные в окно, между последним временем, когда текстовые данные верны, и первым, когда они изменились. Я также экспортировал результаты в xml-документ с параметрами, но он занимает около 680 строк.

Вот список сообщений: http://i.imgur.com/SBCFHK8.png


person user1031745    schedule 11.09.2013    source источник
comment
Вы пытались вызвать InvalidateRect на элементе управления? Может просто нужно перерисовать.   -  person Simon Whitehead    schedule 12.09.2013


Ответы (1)


Возможно, элементу управления просто нужно перекрасить себя.

Для этого вы можете попробовать два API:

person Simon Whitehead    schedule 11.09.2013
comment
Я пытался использовать InvalidateRect, ничего не смог получить. Я только что попытался сделать RedrawWindow, и ничего не изменилось. Я считаю, что использовал его правильно, RedrawWindow(refBox, IntPtr.Zero, IntPtr.Zero, RedrawWindowFlags.AllChildren); - person user1031745; 12.09.2013