【发布时间】:2011-04-08 10:44:37
【问题描述】:
我需要一个精益且平均的 TextBox 解决方案。一个 RichTextBox 太慢了,所以我想走所有者绘图或自定义控件构建的方式。
我需要一个可以处理大文本内容并通过在单词或单个字符周围绘制彩色背景来提供简单突出显示的文本框。重要的是,文本字符串本身不包含为此的标记,而是要标记的单词的索引是单独存储的。相对于文本字符串开头的索引(在谈到 .NET TextBox 时也称为 Text 属性)。
我认为它必须涉及在我自己的控件下绘制文本,因为 Windows 编辑控件将无法执行我需要的操作。
我的应用程序是 Windows 窗体。制作这样一个控件的正确方法是什么,有什么例子吗?
可以在.NET 下进行快速控制吗? (已经假设需要本地 API 调用)。还是用 C++ 做得更好?
附加 1: 我认为这样做的方法正如用户 MarkIsMobile 在 SO 问题 Drawing over a TextBox in .NET Compact Framework 中的回答所描述的那样。看,TextBox 的 OnPaint 并不是很有用,因为 TextBox 是一个相当古怪的控件。 MarkIsMobile 的答案中概述的方法如下:
- 用您自己的 C# 委托替换默认的 Windows 过程
- 但仍保持“默认”行为,并调用“OldWindowsProc”
- 在此之后进行您自己的自定义绘图
我自己还没有尝试过这个,但有兴趣看到更多这样的例子。
还有。我目前的方法是(相同?)通过 NativeWindow 类访问控件并覆盖 WndProc。我只是用一定程度的透明度在文本上覆盖 以创建我所追求的“颜色标记”效果,这实际上效果很好 - 但并不完美。 (有没有办法用位图混合绘制,只对背景着色而不是前景中的文本?)
【问题讨论】:
标签: .net windows winforms controls textbox