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

时间:2010-06-03 18:59:26

标签: c# wpf textselection

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

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

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

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

更新:我刚刚在Code Project上发现了可能适用的这篇文章:Column based selection

1 个答案:

答案 0 :(得分:4)

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

主要问题是你不能使用选择功能,它总是跨越线条。您必须使用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这样的真实编辑器。总而言之,这个答案不太可能得到与问题一样多的赞成。