RichTextBox.SelectedText在幕后做了什么?

时间:2011-02-13 01:50:42

标签: c# winforms controls richtextbox

我正在查看RichTextBox类的SelectedText property

如果您设置属性(使用rtb.SelectedText = "someval"),它会将该行附加到控件。这对于为当前行设置不同的字体样式非常有用,而不会打扰RTB的其他文本。

但它在幕后做了什么?是使用RichTextBox.Text +=还是RichTextBox.AppendText()还是其他我不知道的东西?它没有在文档中的任何地方说它附加文本,但确实如此。

有什么想法吗?这里的文档不是很具描述性。

2 个答案:

答案 0 :(得分:2)

设置SelectedText属性会替换所选文本。如果未选择任何内容,则会将文本插入光标位置,如果尚未移动,则位于文本末尾。

答案 1 :(得分:1)

当您设置SelectedText属性时,.NET Framework会将您的文本转换为数据流,并将基础富编辑控件发送EM_STREAMIN message,并指定数据格式{{1} } flag,以及包含其他信息的EDITSTREAM structure

请注意,大多数WinForms控件都只是Win32 API中对应的包装器,SFF_SELECTION也不例外。 .NET Framework正在以快速,简单和面向对象的方式为您完成,您通常需要手动完成,而不是直接编写Win32 API。

如果您对此类实施细节感到好奇,我强烈建议您在免费时抓取.NET Reflector的副本。它是一个非常宝贵的工具,允许您浏览.NET程序集的源代码,包括Framework的源代码。展开RichTextBox命名空间并找到System.Windows.Forms类。从那里,找到它的RichTextBox属性,然后按 Space 栏来反汇编代码。单击任何方法调用也将跳转到这些方法的代码。你可以非常清楚地了解幕后发生的事情。

但是请记住,在编写代码时,你不应该依赖这种类型的实现细节。虽然这个特定的例子不太可能改变,但是有一个原因,文档没有详细说明如何在幕后实现。在像WinForms这样的高级环境中工作的全部意义在于它将大部分复杂性抽象出来,而这种复杂性通常会被迫与之竞争。只需编写有意义的代码即可。

相关问题