void UpdateSuggestionList() { //find suggestion words _currentLocalText = null; _listbox.ClearItems(); TextEditing.Run currentSpan = _textbox.CurrentTextSpan; if (currentSpan == null) { _listbox.Visible = false; return; } //------------------------------------------------------------------------- //sample parse ... //In this example all country name start with Captial letter so ... //try to get underlining text //int startAt, len; //textbox.FindCurrentUnderlyingWord(out startAt, out len); string currentTextSpanText = currentSpan.GetText().ToUpper(); //analyze content char[] textBuffer = currentTextSpanText.ToCharArray(); _textSplitBoundsList.Clear(); _textSplitBoundsList.AddRange(_textbox.TextSplitter.ParseWordContent(textBuffer, 0, textBuffer.Length)); //get last part of splited text int m = _textSplitBoundsList.Count; if (m < 1) { return; } int splitBoundIndex = GetProperSplitBoundIndex(_textSplitBoundsList, _textbox.CurrentLineCharIndex); if (splitBoundIndex < 0) { return; } //find current split bounds Composers.TextSplitBounds selectBounds = _textSplitBoundsList[splitBoundIndex]; _currentLocalText = GetString(textBuffer, selectBounds); char firstChar = _currentLocalText[0]; if (_words.TryGetValue(firstChar, out List <string> keywords)) { int j = keywords.Count; int listViewWidth = _listbox.Width; for (int i = 0; i < j; ++i) { string choice = keywords[i].ToUpper(); if (StringStartsWithChars(choice, _currentLocalText)) { CustomWidgets.ListItem item = new CustomWidgets.ListItem(listViewWidth, 17); item.BackColor = KnownColors.LightGray; item.Tag = item.Text = keywords[i]; _listbox.AddItem(item); } } } if (_listbox.ItemCount > 0) { _listbox.Visible = true; //TODO: implement selectedIndex suggestion hint here *** _listbox.SelectedIndex = 0; //move listview under caret position var caretPos = _textbox.CaretPosition; //temp fixed //TODO: review here _listbox.SetLocation(_textbox.Left + caretPos.X, _textbox.Top + caretPos.Y + 20); _listbox.EnsureSelectedItemVisible(); } else { _listbox.Visible = false; } //------------------------------------------------------------------------- }