使用Alt-Left-Mouse扫描在RichTextBox中进行矩形选择?

有很多应用程序允许您在按下Alt键的同时用鼠标扫描选择文本框或矩形。 例如,Visual Studio 2010在代码编辑器中执行此操作。 Emacs做到了。 Winword做到了。 我们都看到了。 似乎必须有一个标准模式来编码这种行为,但我似乎无法找到它。

我怀疑我不是谷歌搜索正确的关键字,因为我得到的是矩形,Alt-Left,扫描,选择等的错误命中。

我确信我可以对其进行编码,但这意味着禁用RichTextBox中使用的正常选择代码。 这听起来很丑陋,容易出错,而且可能比它的价值更多。

任何人都有一个建议(很好!:-))如何做到这一点或一个如何做的例子?

更新:我刚刚在Code Project上发现了可能适用的这篇文章: 基于列的选择

RichTextBox经常被误认为是编辑器。 从技术上讲,你需要很多代码。 第一项业务是选择固定间距字体,如Courier。

主要问题是你不能使用选择function,它总是跨越线条。 您必须使用SelectionBackColor属性伪造它。 实现MouseDown和MouseMove事件,检查Control.Modifiers属性以查看ALT键是否已关闭。 使用GetCharIndexFromPosition查看正在选择的内容。 在move事件中,循环遍历de / selected的列和行,使用SelectionStart,SelectionLength和SelectionBackColor属性为字符着色。

这会像便宜的汽车旅馆一样闪烁。 P / Invoke SendMessage()在之前和之后发送WM_SETREDRAW消息以避免这种情况。

选择一些东西很有挑战性。 您需要对RTB进行子类化,以便可以覆盖WndProc()并检测WM_COPY,WM_CUT,WM_PASTE消息。 其他随机问题是当鼠标靠近控件的顶部或底部时自动滚动,并在进行另一个选择时取消选择。

或者您可以使用真实的编辑器,如ScintillaNET。 总而言之,这个答案不太可能得到尽可能多的赞成。