如何防止ScintillaNET控件自动滚动?

7

我在我的C# Winforms应用程序中使用ScintillaNET控件。 我尝试实现一个自动标签功能,它将在用户输入例如<html>时,自动完成标签并插入</html>

我正在使用ScintillaNET CharAdded 函数进行此实现:

if (caretPos != 0)
        {
            //If the characters before the caret are "ml>" (last three chars from "<html>")
            if (TextArea.Text[caretPos - 1] == '>' && TextArea.Text[caretPos - 2] == 'l' && TextArea.Text[caretPos - 3] == 'm')
            {
                TextArea.Text = TextArea.Text.Insert(caretPos, "</html>");
                TextArea.SelectionStart = caretPos + 0;
                TextArea.Selections.First();
                TextArea.ScrollCaret();
            }
        }

问题

我的问题是,Scintilla控件一直向上或向下滚动。我认为使用ScrollCaret()函数可以解决它,但它仍然持续发生。有什么想法吗?

1个回答

5

我也曾经遇到过这个问题。一度认为是bug。即使是Github issue页面上提供的解决方案也没有帮助。但后来我发现,如果您使用以下方法插入文本:

TextArea.Text = TextArea.Text.Insert(caretPos, "");

那本身就是问题所在。ScintillaNET已经有一个Text.Insert函数。使用InsertText将防止控件滚动。

编辑

找到了问题,还在这里提出了该问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接