Scintilla.NET Autocomplete 自动选择第一个元素 (C#)
Posted
技术标签:
【中文标题】Scintilla.NET Autocomplete 自动选择第一个元素 (C#)【英文标题】:Scintilla.NET Autocomplete automatically chooses first element (C#) 【发布时间】:2012-02-02 07:59:45 【问题描述】:我目前正在为 Text 组件创建一个使用 Scintilla 的 IDE。但是自动完成有一些我没有解决的问题。
我进入后自动显示提案列表。在对象或类名之后。
然后我调用以下代码:
int pos = _editor.NativeInterface.GetCurrentPos();
string word = _editor.GetWordFromPosition(pos - 1);
if (string.IsNullOrEmpty(word))
return;
if (Objects.Keys.Contains(word))
System.Reflection.MemberInfo[] memberInfos = Reflector.PublicMembersOf(Objects[word]);
List<String> proposals = new List<string>();
foreach (System.Reflection.MemberInfo mi in memberInfos)
string member = mi.ToString();
if (Reflector.IsRealMethod(mi))
proposals.Add(mi.ToString().Split(" ".ToCharArray(), 2)[1].Replace(" ", ""));
proposals.Sort();
_editor.AutoComplete.Show(0, proposals);
Objects
是一个HashMap<String, Type>
,其中存储了所有对象和相应的类型。
当我第一次调用自动完成时,它工作正常。但第二次使用它只会自动完成proposals
的第一个元素。
【问题讨论】:
这个没有cmets?您需要更多代码吗?我真的需要这个,但我没有完成。 【参考方案1】:我认为问题在于您尝试在“。”之后使用开放式自动完成功能。象征。如您所见,在您键入“。”后,自动完成功能将关闭。或 '(' 并选择当前单词作为自动完成的结果。 我需要做同样的事情:在“。”之后打开自动完成列表。象征。解决方法很简单,你可以在 10 毫秒后打开它。例如使用以下代码:
private void scintillaCs_CharAdded(object sender, ScintillaNET.CharAddedEventArgs e)
ScintillaNET.Scintilla editor = sender as ScintillaNET.Scintilla;
if (e.Ch == '.')
Timer t = new Timer();
t.Interval = 10;
t.Tag = editor;
t.Tick += new EventHandler((obj, ev) =>
// make a new autocomplete list if needed
List<string> s = new List<string>();
s.Add("test");
s.Add("test2");
s.Add("test3");
s.Sort(); // don't forget to sort it
editor.AutoComplete.ShowUserList(0, s);
t.Stop();
t.Enabled = false;
t.Dispose();
);
t.Start();
【讨论】:
以上是关于Scintilla.NET Autocomplete 自动选择第一个元素 (C#)的主要内容,如果未能解决你的问题,请参考以下文章
Scintilla.NET Autocomplete 自动选择第一个元素 (C#)
检测光标位于 Scintilla NET 中的注释或字符串上方
使用 angular-google-places-autocomplete