【问题标题】:Problems with setting insertion point in a wxTextCtrl在 wxTextCtrl 中设置插入点的问题
【发布时间】:2012-09-14 23:36:37
【问题描述】:

我正在尝试在 wxWidgets(版本 2.8.12)中实现自定义小部件,本质上是修改后的单行 wxTextCtrl。它需要一个文本输入,其中包含由空格分隔的两组 8 位十六进制数字,我希望控件自动处理该空格。例如,如果用户两次键入 1-8(无需按空格键),则文本控件的结果内容应为:

12345678 12345678

如果用户将光标放在第一个“3”之后并退格三次,则该空间应在编辑时自动调整,从而导致:

45678123 45678

本质上,空间应该对用户完全透明。

我已经完成了大部分工作。代码有点长,贴在这里,这里是一个要点:
https://gist.github.com/036c1a90f77521a8653c

但是,有一个错误,我似乎无法修复 - 在键入第九位时,它会自动插入空格,但光标会在空格之后结束,就在第九位之后。

所有使用wxTextCtrl::SetInsertionPoint()wxTextCtrl::SetInsertionPointEnd()的尝试都没有成功,所以我作为最后的手段来到这里,希望有人能指出我做错了什么。

为了帮助测试这个小部件,我准备了一个非常快速而肮脏的应用程序,其中包含小部件:
https://gist.github.com/cf3219eb47e2bfe85b38
或单击此处以 tarball 格式下载代码:
https://gist.github.com/gists/cf3219eb47e2bfe85b38/download

只需运行make 即可一次清理、编译和运行代码。当然,您需要安装 wxWidgets 2.8.12 才能编译。

这个小部件的大多数其他方面都完全按照我的意愿工作 - 正是这个非常大的问题使它无法工作。不过,有一个小错误让我很好奇,虽然这不是主要问题,但我想在一段时间内修复它。

即使删除字符,空格也会被自动处理,即使您删除了一个选择 - 但是,如果您删除的选择在第九位结束,它不会在删除后重新格式化控件的内容。

如果有人能查明原因,将不胜感激,但插入点问题显然是我主要关心的问题。

感谢任何愿意提供帮助的人,我尽力提供尽可能多的信息和解释——如果我遗漏了什么,请告诉我。

【问题讨论】:

    标签: c++ user-interface textbox wxwidgets wxtextctrl


    【解决方案1】:

    一般来说,很难修改原生控件的输入处理,因为它在不同平台下的行为不同。我不知道您是否已经在所有(或至少一个以上)代码下测试了您的代码,但我完全希望您能发现更多问题。

    建议您查看wxMaskedEdit 建议添加到 wxWidgets 本身,而不是尝试自己做。它还不是最终版本,但已经有一个preliminary version,我认为它也可以与 2.8 一起使用(当然,它是用 2.9 开发的)。

    【讨论】:

      猜你喜欢
      • 2021-08-26
      • 2013-05-17
      • 2020-03-25
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      相关资源
      最近更新 更多