ScintillaNET自动完成和CallTip

时间:2013-12-31 00:29:05

标签: c# wpf scintilla

我使用ScintillaNET制作基本的IntelliSense编辑器。但是,当我在_editor.CallTip.Show("random text")事件中调用AutoCompleteAccepted时,我遇到了问题。

例如,如果我键入pr,并在下拉列表中滚动并选择printf,则会转到我的AutoCompleteAccepted事件,并且当我拨打 CallTip时。显示,其余部分未添加(但是,如果没有该CallTip代码,则会填写其余部分)。

因此,如果我输入pr,那么它会保留pr,然后我会收到我的CallTip。如何确保插入其余单词并且CallTip显示?

AutoCompleteAccepted活动不是正确的地方吗?如果是这样,我应该在哪里拨打 CallTip.Show ,以便它与我的自动完成工作并排?

1 个答案:

答案 0 :(得分:2)

终于想通了! AutoCompleteAccepted活动不适合放置 CallTip.Show

事实是,当调用AutoCompleteAccepted事件并向 ScintillaNET 控件添加文本时,UI需要时间进行更新,因此,当您调用时为了显示CallTip,它会干扰插入控件的文本。

更好的方法是在TextChanged事件中调用 CallTip.Show ,因为他们知道在AutoCompleteAccepted事件发生时已插入文本调用。

现在看起来像这样:

String calltipText = null; //start out with null calltip

...

private void Editor_TextChanged(object sender, EventArgs e)
{
    if (calltipText != null)
    {
         CallTip.Show(calltipText); //note, you may want to assign a position
         calltipText = null; //reset string
    }

    ... 
}

...

private void Editor_AutoCompleteAccepted(object sender, AutoCompleteAcceptedEventArgs e)
{
    if (e.Text == "someThing")
    {
         /* Code to add text to control */
         ... 

         calltipText = "someKindOFText"; //assign value to calltipText
    }

}

基本上可以做的是确保自动完成填充正确并且您可以显示CallTip。

请注意,CallTip MAY 最终会出现在非预期的位置,因此建议您设置希望CallTip显示的位置值