【问题标题】:Show Whitespace in a textbox or richtextbox在文本框或富文本框中显示空白
【发布时间】:2011-09-23 18:51:57
【问题描述】:

Visual Studio 中有一个选项(从我记事起)可以让您在代码中看到“空白”。这在文件差异查看器中也很常见。

我想知道是否有人知道如何在 VB.net(或任何其他方式)中实现这一点,以便我可以在我的软件中使用类似类型的显示选项。

我还没有尝试这样做,但我唯一的第一个想法是覆盖文本框的“绘画”,以通过 GDI 手动添加小标签“箭头”和空格“点”,或者创建一个 texbox 控件从头开始。在我看来,可能有更简单的方法来做到这一点。

欢迎提出任何建议或解决方案。

【问题讨论】:

  • 你考虑过使用Regular Expressions吗?
  • 查找制表符和空格不是问题,可以通过多种方式完成。这是关于实际覆盖 SPACE 和 TAB 字符本身以显示“synbol”供用户查看。
  • 您可以简单地覆盖关键事件,毫不费力地得到您想要的。
  • 我看不出检测到用户输入选项卡或空格会如何改变呈现的输出,尤其是在多次击键和可能的滚动之后。我不想将制表符/空格从制表符/空格中更改为制表符/空格,只需在其位置渲染浅灰色箭头/点即可。你能进一步解释一下吗?

标签: vb.net textbox rendering whitespace gdi


【解决方案1】:

在整个文档中搜索 vbTab 常量并用小箭头 () 替换它们(用灰色或任何你想要的东西绘制)

对空格字符执行相同操作,但将其替换为灰点 (·)
如果你想改回来,用空格替换·,用制表符替换箭头(

完成此操作后,将布尔值 (useSymbol) 设置为 true,并在文本框的 keydown 事件中使用此布尔值来检查是否应该打印常规空格/制表符或 ·/

【讨论】:

  • 这很聪明。我没有想到要实际更改字符和字体。我想我可以使用 Webdings 3 “g” 字符作为箭头,并使用 Webdings “=” 作为浅色字体的点,我可以完全避免任何图形渲染覆盖。当我需要“普通”文本时,也可以使用扩展方法将其解析出来。非常好,2个赞!
  • 这行得通,但是你失去了制表符给你的间距——箭头字符的宽度是一个字符,而制表符的宽度可以是 1-8 个字符。有什么想法吗?
  • @alldayremix 也许你可以用箭头字符+一些前导和尾随特殊空白字符替换它,任何不同于空格的字符,这样当你切换时它不会被替换为点
  • 好的,但是如何找到特定 Tab 字符的显示字符宽度(例如 1 个字符、3 个字符、8 个字符)?
  • @alldayremix 你在用richtexboxcontrol 吗?如果是这样,richTextBox1.SelectionTabs 可能会对您有所帮助
猜你喜欢
  • 1970-01-01
  • 2014-02-09
  • 2010-10-14
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
相关资源
最近更新 更多