ScintillaNET Autocomplete и CallTip

Я использую ScintillaNET для создания базового редактора IntelliSense. Однако у меня возникла проблема, когда я вызываю _editor.CallTip.Show("random text") в событии AutoCompleteAccepted.

Например, если я наберу pr, прокрутлю и выберу printf в раскрывающемся списке, оно перейдет к моему событию AutoCompleteAccepted, а когда я вызову CallTip.Show, остальная часть слова не будет добавлена (однако без этого кода подсказки заполняется остальная часть слова).

Итак, если я набрал pr, то останется pr, и я получу подсказку. Как мне убедиться, что остальная часть слова вставлена ​​и отображается всплывающая подсказка?

Разве событие AutoCompleteAccepted не подходит для этого? Если да, то где мне вызвать CallTip.Show, чтобы он работал параллельно с автозаполнением?


person inixsoftware    schedule 31.12.2013    source источник


Ответы (1)


Наконец-то разобрался! Событие AutoCompleteAccepted — неподходящее место для размещения CallTip.Show.

Происходит то, что когда вызывается AutoCompleteAccepted Event и вы добавляете текст в элемент управления ScintillaNET, для обновления пользовательского интерфейса требуется время, и поэтому, когда вы вызываете для отображения подсказки, он мешает с текстом, вставляемым в элемент управления.

Лучший способ сделать это — вызвать CallTip.Show в событии TextChanged, поскольку вы знаете, что текст был вставлен при вызове события 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
    }

}

По сути, это то, что можно сделать, чтобы обеспечить правильное заполнение автозаполнения и отображение всплывающей подсказки.

Просто обратите внимание, что подсказка МОЖЕТ оказаться в непредусмотренных местах, поэтому рекомендуется установить значение того, где вы хотите, чтобы подсказка отображалась.

person inixsoftware    schedule 13.02.2014