广告位招租

ScintillaNET 自动完成实现

你要负责触发自动完成,Scintilla不会为你做。这让很多开发者感到困惑,他们认为这应该是自动完成的。但别担心,这并不难。

最简单的方法是监控CharAdded事件–每次在文档中插入一个字符时都会被触发。然后,你的应用程序逻辑可能会确定被键入的单词是语言关键字、标识符名称,还是其他东西,并提供适当的可能的自动完成单词列表。这由你来决定。

最简单的,这就是它的工作原理。

private void scintilla_CharAdded(object sender, CharAddedEventArgs e)
{
// Find the word start
var currentPos = scintilla.CurrentPosition;
var wordStartPos = scintilla.WordStartPosition(currentPos, true);
// Display the autocompletion list
var lenEntered = currentPos - wordStartPos;
if(lenEntered > 0)
{
if(!scintilla.AutoCActive)
scintilla.AutoCShow(lenEntered, "abstract as base break case catch checked continue default delegate do else event explicit extern false finally fixed for foreach goto if implicit in interface internal is lock namespace new null object operator out override params private protected public readonly ref return sealed sizeof stackalloc switch this throw true try typeof unchecked unsafe using virtual while");
}
}

当您显示一个自动完成列表时,您可以告诉Scintilla正在完成的单词有多少个字符已经被输入。通过这样做,Scintilla将缩小可能的完成词列表,当用户用tab键或回车键选择其中一个词时,将自动完成该词的其余部分,而不是插入整个词。这就是使用WordStartPosition的代码所做的事情–计算出当前单词已经输入了多少个字符。

if (lenEntered > 0)检查是确保用户正在输入一个单词,而不仅仅是输入空格。如果wordStartPos与currentPos相同,就意味着我们的小圆点在空格的中间,而不是一个单词。另一种方法是检查CharAddedEventArgs.Char属性。

原文链接:https://www.exueyuan.top/511.html,转载请注明出处。

0
广告位招租

评论0

请先

广告位招租
易学手机界面分析工具上线!可用于安卓手机界面,模拟器界面分析,加速自动化开发!查看详情
没有账号? 注册  忘记密码?

社交账号快速登录

微信扫一扫关注
如已关注,请回复“登录”二字获取验证码