加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – 所有者绘制TextBox以在WinForms中使用

发布时间:2020-12-14 05:29:40 所属栏目:Windows 来源:网络整理
导读:我需要精益和意思是TextBox解决方案. RichTextBox证明太慢了,所以我想采用所有者绘图或自定义控件构建的方式. 我需要一个可以处理大文本内容的文本框,并通过在单词或单个字符周围绘制彩色背景来提供简单的突出显示.重要的是,文本字符串本身不包含此标记,而是
我需要精益和意思是TextBox解决方案. RichTextBox证明太慢了,所以我想采用所有者绘图或自定义控件构建的方式.

我需要一个可以处理大文本内容的文本框,并通过在单词或单个字符周围绘制彩色背景来提供简单的突出显示.重要的是,文本字符串本身不包含此标记,而是要分别存储要标记的单词的索引.相对于文本字符串开头的索引(在谈论.NET TextBox时也称为Text属性).

我认为它必须涉及在我自己控制下绘制文本,因为Windows编辑控件将无法满足我的需要.

我的应用程序是Windows Forms.制作像这样的控件的正确方法是什么,有什么例子吗?

可以在.NET下快速控制吗? (已经假定需要本机API调用).或者这在C中做得更好?

增加1:我认为这样做的方式是由用户MarkIsMobile在SO问题Drawing over a TextBox in .NET Compact Framework中的答案所描述的.看,TextBox的OnPaint并不是很有用,因为TextBox是一个相当古怪的控件. MarkIsMobile答案中概述的方法如下:

>使用您自己的C#委托替换默认的Windows过程
>但仍然保持’默认’行为,并调用’OldWindowsProc’
>在此之后做自己的自定义绘图

我自己还没有尝试过,但有兴趣看到更多这方面的例子.

也.我当前的方法是(相同?)通过NativeWindow类访问控件并覆盖WndProc.我只是以一定程度的透明度绘制文本,以创建我所追求的“颜色标记”效果,这实际上很好 – 但并不完美. (有没有方法使用位图混合绘制,只对背景着色而不是前景中的文本?)

解决方法

你无法现实地实现自己的TextBox,编写自己的文本编辑器正在受到惩罚.使用现成的东西,如ScintillaNET.

编写自己的可滚动标签有点可行.从双缓冲面板开始,使用OnPaint绘制文本.如果你没有实现自动换行,它将永远是一个改进,因为你必须在滚动的第一个可见行之前包装所有文本,因此弄清楚从哪里开始绘图是非常昂贵的.计算AutoScrollMinSize是很昂贵的,因为您必须扫描整个文本以计算换行符,确保您不必经常更新文本.

一般来说,你只会发现为什么TextBox和它一样慢的可能性很大.通过将文本数量限制为人们可以合理地预期想要阅读的内容来保持其性能.哪个不多.我这样做是通过跟踪每个追加文本的长度,并在超过65536个字符时抛出一半.一个很好的数字.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读