保护 ScintillaNet 中的一系列文本:最好的方法是啥?

Posted

技术标签:

【中文标题】保护 ScintillaNet 中的一系列文本:最好的方法是啥?【英文标题】:Protect a range of text in ScintillaNet: what is the best way to do it?保护 ScintillaNet 中的一系列文本:最好的方法是什么? 【发布时间】:2018-12-27 00:24:04 【问题描述】:

我知道样式有一个属性可以允许/避免更改应用它们的文本:

SCI_STYLESETCHANGEABLE(int style, bool changeable)

但是,文档说“这是一个实验性且未完全实现的样式属性。”,这似乎不是“生产就绪”

我认为还有另一种选择,使用“Indicators”:

为了保护一系列文本,我们可以对其应用一个特定的指示符,并在 keydown 事件中检测“del”和“backspace”。如果“del”情况下当前位置(插入符号位置)之后的字符或“退格”情况下当前位置之前的字符有这个指示符,那么我们必须取消该事件并且不要擦除文本。

这两种选择哪个更好?还有更好的方法吗?

注意:ScintillaNet 基于 Scintilla,我假设最后一个的大量文档对两者都有效。

【问题讨论】:

【参考方案1】:

我与您分享“scintilla-interest”google-groups 中发布 Scintilla 的创建者 Neil Hodgson 的回复之一。

[Ian G.]> SCI_STYLESETCHANGEABLE 是我在编写此补丁之前最初尝试的方法。我能看到的唯一真正的缺点是,在像我这样的情况下,它需要的样式数量增加了一倍,因为可写区域中可能出现的每种视觉样式也可能出现在受保护区域中,但我可以忍受。

[Neil Hodgson] 最好为保护区使用指标,因为它们相对节省空间并避免样式数量加倍。

complete post in scintilla-interest

【讨论】:

以上是关于保护 ScintillaNet 中的一系列文本:最好的方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

用于 ScintillaNET 的字节数组到文本

无法在语法着色之后或之前设置 ScintillaNet 文本样式

ScintillaNet - 计算出用户点击了哪一行

如何实现 ScintillaNET 列编辑模式

从 ScintillaNet 打印内容时打印行号

在 ScintillaNET 控件中实现块注释/取消注释