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

Har*_*ord 5 c# wpf textselection

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

我怀疑我没有用正确的关键字搜索,因为我得到的是矩形,Alt-Left,扫描,选择等的错误命中.

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

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

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

Han*_*ant 4

RichTextBox 经常被误认为是编辑器。这在技术上是可行的,您需要大量代码。第一个任务是选择固定间距的字体,例如 Courier。

主要问题是您无法使用选择功能,它总是跨越行。您必须伪造它,可以使用 SelectionBackColor 属性来伪造它。实现 MouseDown 和 MouseMove 事件,检查 Control.Modifiers 属性以查看 ALT 键是否按下。使用 GetCharIndexFromPosition 查看正在选择的内容。在移动事件中,循环遍历取消/选择的列和行,使用 SelectionStart、SelectionLength 和 SelectionBackColor 属性为字符着色。

这会像廉价汽车旅馆一样闪烁。P/Invoke SendMessage() 前后发送 WM_SETREDRAW 消息以避免这种情况。

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

或者您可以使用真正的编辑器,例如 ScintillaNET。总而言之,这个答案不太可能获得与问题一样多的支持。