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

Posted

技术标签:

【中文标题】使用 Alt-Left-Mouse 扫描在 RichTextBox 中进行矩形选择?【英文标题】:Making a rectangular selection in a RichTextBox with Alt-Left-Mouse sweep? 【发布时间】:2011-02-27 11:23:59 【问题描述】:

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

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

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

有人对如何做到这一点或如何做到这一点有一个建议(很好!:-))?

更新:我刚刚在可能适用的代码项目上找到了这篇文章:Column based selection

【问题讨论】:

我没有答案,只是想说谢谢你的提示,以前从未注意到你可以这样做...... 是的,它很少做广告,但当你需要它时,别无他法。 【参考方案1】:

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。总而言之,这个答案不太可能得到与问题一样多的支持。

【讨论】:

哇!这伤害了我的眼睛! :-) 我担心这会比它的价值更多。我拥有的应用程序更像是一个记录工具,而不是一个编辑器,我想我会根据一般原则添加矩形选择。我现在必须重新考虑。谢谢,汉斯。

以上是关于使用 Alt-Left-Mouse 扫描在 RichTextBox 中进行矩形选择?的主要内容,如果未能解决你的问题,请参考以下文章

在kdb中进行回测;在我们解析每一行表时更新/传递表

带有重音的xcode sql字符已更改

EXCEL中宏 方法作用于对象失败

正则表达式将 SQL INSERT 语句转换为键值字典

推送通知操作按钮

带撇号的 Python 标题()