internal virtual void OnSelecting() { if (selectedItemIndex < 0 || selectedItemIndex >= visibleItems.Count) { return; } tb.TextSource.Manager.BeginAutoUndoCommands(); try { AutocompleteItem item = visibleItems[selectedItemIndex]; SelectingEventArgs args = new SelectingEventArgs() { Item = item, SelectedIndex = selectedItemIndex }; Menu.OnSelecting(args); if (args.Cancel) { selectedItemIndex = args.SelectedIndex; Invalidate(); return; } if (!args.Handled) { var fragment = Menu.Fragment; DoAutocomplete(item, fragment); } Menu.Close(); // SelectedEventArgs args2 = new SelectedEventArgs() { Item = item, Tb = Menu.Fragment.tb }; item.OnSelected(Menu, args2); Menu.OnSelected(args2); } finally { tb.TextSource.Manager.EndAutoUndoCommands(); } }
private void SetToolTip(AutocompleteItem autocompleteItem) { var title = visibleItems[selectedItemIndex].ToolTipTitle; var text = visibleItems[selectedItemIndex].ToolTipText; if (string.IsNullOrEmpty(title)) { toolTip.ToolTipTitle = null; toolTip.SetToolTip(this, null); return; } if (string.IsNullOrEmpty(text)) { toolTip.ToolTipTitle = null; toolTip.Show(title, this, Width + 3, 0, 3000); } else { toolTip.ToolTipTitle = title; toolTip.Show(text, this, Width + 3, 0, 3000); } }
private void DoAutocomplete(AutocompleteItem item, Range fragment) { string newText = item.GetTextForReplace(); //replace text of fragment var tb = fragment.tb; if (tb.Selection.ColumnSelectionMode) { var start = tb.Selection.Start; var end = tb.Selection.End; start.iChar = fragment.Start.iChar; end.iChar = fragment.End.iChar; tb.Selection.Start = start; tb.Selection.End = end; } else { tb.Selection.Start = fragment.Start; tb.Selection.End = fragment.End; } tb.InsertText(newText); tb.Focus(); }