【问题标题】:Undo margin text changes in Scintilla撤消 Scintilla 中的边距文本更改
【发布时间】:2011-05-06 17:08:14
【问题描述】:

我正在用 Scintilla 编写一个文本编辑器(实际上是 ScintillaNET,但有关 vanilla Scintilla 的信息也可能很有用)。在此编辑器中,我们希望在边距中显示更改信息(例如,如果我修改了一行文本,该行将在边距中显示我的名字)。我已经设法在修改一行时更改了边距,但如果有人撤消他们的更改,我似乎无法找到撤消边距更改的好方法。

我尝试在 BeforeTextInsert 事件中调用 BeginUndoAction 并在 TextInserted 事件结束时调用 EndUndoAction,但这似乎并未将边距更改视为可撤消。有没有一种不错的方法来撤消保证金变化?我想我可能需要实现我自己的小边距撤消堆栈(或修改 Scintilla 的撤消堆栈)并以这种方式处理它,但如果有内置的东西,我宁愿这样做。

【问题讨论】:

    标签: c# undo scintilla


    【解决方案1】:

    我刚刚创建了自己的撤消堆栈以保存边距更改。如果正在修改文本并且它不是撤消,我会添加修改后的文本、起始位置、行数和字符串列表(每行修改的边距文本)。如果有修改并且是撤消,我会查看堆栈上的第一项,如果位置和修改后的文本相同,我会继续将边距改回旧值。

    似乎工作正常,虽然它比我想要的有点丑。我确实担心堆栈会以某种方式与 Scintilla 撤消堆栈不同步,但我并不是真的想修改 Scintilla 源代码。

    【讨论】:

      猜你喜欢
      • 2021-07-23
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 2021-05-20
      • 1970-01-01
      • 2011-01-15
      相关资源
      最近更新 更多