【问题标题】:How to force a textbox to update its text如何强制文本框更新其文本
【发布时间】:2013-09-16 03:45:37
【问题描述】:

所以我已经浏览了大约 5 到 10 个关于 stackoverflow 的关于使用一系列命令将文本设置到文本框中的问题。我已经尝试过 SetWindowText、带有 EM_SETSEL 和 EM_REPLACESEL 的 SendMessage,以及其他一些我想不出来的东西。大部分情况下,我都是成功的,除了一件奇怪的事情。

当我设置这个特定文本框的文本时,什么都没有出现,没有任何变化。起初我以为我没有正确设置数据。但是,当我使用 Spy++ 或 Winspector 查看文本框的文本时,我所做的更改的正确数据在那里,但未显示在实际的文本框中。更奇怪的是,当我用我“编辑”的文本框点击返回表单时,spy++ 和 Winspector 的数据会更改为文本框显示的内容。

我和我的一个朋友谈过,他提到这可能是一种比赛条件。我正在尝试编辑此框,并且该文本框也正在由其他线程编辑。

如果有人有任何建议,我将不胜感激。

编辑:好的,所以我对导致文本变回问题的原因进行了更多挖掘。我打开 Winspector 并让它观看文本框。从那里我能够识别在文本数据最后一次正确到第一次更改之间发送到窗口的消息。我也将结果导出到带有参数的 xml 文档,但它大约有 680 行长。

以下是消息列表: http://i.imgur.com/SBCFHK8.png

【问题讨论】:

  • 您是否尝试在控件上调用InvalidateRect?它可能只需要重新绘制。

标签: c# textbox sendmessage user32 spy++


【解决方案1】:

控件可能只需要重新绘制自己。

您可以尝试两个 API 来做到这一点:

【讨论】:

  • 我尝试过使用 InvalidateRect,但什么也得不到。我只是尝试做 RedrawWindow 并且没有任何改变。我相信我用对了,RedrawWindow(refBox, IntPtr.Zero, IntPtr.Zero, RedrawWindowFlags.AllChildren);
猜你喜欢
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
相关资源
最近更新 更多