[英]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()
,见这里:
...并且您将拥有一个MemberInfo
对象数组,这些对象具有名称( .Name
),成员类型( .MemberType
)以及其他信息,例如参数列表。
希望有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.