【问题标题】:ScintillaNET Autocomplete and CallTipScintillaNET 自动完成和 CallTip
【发布时间】:2014-01-17 22:45:04
【问题描述】:

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

例如,如果我输入pr,然后滚动并在下拉列表中选择printf,它会转到我的AutoCompleteAccepted 事件,当我调用CallTip.Show 时,单词的其余部分不会被添加(但是,如果没有 CallTip 代码,单词的其余部分会被填充)。

所以,如果我输入 pr,那么它会保持在 pr 并且我会收到我的 CallTip。如何确保单词的其余部分被插入并且 CallTip 显示?

AutoCompleteAccepted 事件不适合调用它吗?如果是这样,我应该在哪里调用 CallTip.Show 以便它与我的 AutoComplete 一起工作?

【问题讨论】:

    标签: c# wpf scintilla


    【解决方案1】:

    终于明白了! 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 可能最终出现在意想不到的地方,因此建议设置您希望 CallTip 显示位置的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 2014-05-31
      • 1970-01-01
      • 2011-03-29
      • 2013-04-10
      相关资源
      最近更新 更多