繁体   English   中英

实现Visual Studio Intellisense

[英]Implementing Visual Studio Intellisense

我正在尝试将基于richtextbox控件的Intellisense添加到C#代码编辑器中。 到目前为止,我已经解析了输入的文本以查找所有变量及其类型(效果很好)。 下拉框效果很好。 我无法得到的是下拉列表框的正确选项列表。

如何以编程方式获取以下列表:

替代文字

我已经编译了变量列表及其类型,因此当用户按下时. 我知道我有一个Color类型的变量c 我只需要知道要调用哪个函数来获取下拉框所需的列表。

我尝试过这段代码: http//www.codeproject.com/KB/cs/diy-intellisense.aspx但无法使其正常工作。 我还在StackOverflow上阅读了大量其他线程但无济于事。 我真的想完成这个而不是使用别人的插件编辑器组件。

任何提示将不胜感激。 谢谢。

如果您知道类型,您应该能够反映类型并获得所需的所有信息。

Type.GetMembers可能是你最好的选择。 您可能还需要第二次调用以获取任何静态方法:

var instanceMembers = typeof(Color)
                      .GetMembers(BindingFlags.Instance | BindingFlags.Public);

var staticMembers = typeof(Color)
                    .GetMembers(BindingFlags.Static | BindingFlags.Public);

每个MemberInfo对象都能告诉你MemberType(属性,字段,方法,事件等)

只需在用户键入变量时使用instanceMembers (如示例中的c ),然后使用. 并在用户键入类型名称(如示例中的Color )后跟staticMembers使用staticMembers .

假设你有一个带有类型的名称表,这应该给你一个不错的开始:

var type = _names[name].Type;
var members = type.GetMembers(); // Check context to grab private methods?

所以也许你可以扩展你的名字表包括:

Type
Context
Members

你想在某种程度上使用反射。 如果您具有类型或类型的名称,则可以获取Type实例。

例如Type.GetType("System.Int32")

然后你可以在那个Type对象上调用Type.GetMembers() ,见这里:

http://msdn.microsoft.com/en-us/library/424c79hc.aspx

...并且您将拥有一个MemberInfo对象数组,这些对象具有名称( .Name ),成员类型( .MemberType )以及其他信息,例如参数列表。

希望有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM