I needed a script-editor control for one of my projects, with syntax highlighting and intellisense for more comfort. I did a search on CodeProject and Google, but didn't find any - just separate solutions for one of the two functions... The one I found with both syntax highlighting and intellisense just wasn't flexible enough for me, because it could be used only for C#, and only could handle classes (intellisense popped up after pressing the . key). As I wanted to use this mostly for LUA, this simply wasn't enough. I decided to use this control as a sample, and write my own, flexible one... After a few days, I came out with this: I have a flexible syntax-highlighter, with intellisense. I can edit everything in design mode, for example, the intellisense hotkey, or the scope-operator's list... Yes, I can handle not just the point, but more like ::, or ->, with C++ language support in mind.
Using the code
I designed the
CodeTextBox control to be easy to work with: you can edit all the necessary properties in design mode as well, under the CodeTextBox category.
There're some things that I couldn't do automatically, or put in Design mode...
- If you put text in the
CodeTextBox programmatically, you should update syntax highlighting to get the proper results.
You can do it like this:
- I used the built-in
TreeView control to store intellisense's data. I know it's a waste of resources, but it was a fast solution for now, and I need to give some instructions on how to use it, because there's a lot of things there...
To build up the intellisense-tree, you should add items to the intellisense-tree's nodes. I use the node's
Tag attributes for intellisense.
Name should contain the name of the intellisense item,
Tag should contain one of the following: class, event, interface, namespace, method, or property. Intellisense will assign images before the names based on this
I know that it's not perfect yet, but hey, it's useable... Let me tell you some ideas to make this better, and also some of its limitations that I haven't been able to solve until now...
As in most syntax highlighters, I cannot handle C-style comment blocks, and keywords like
- Implementing an XML serializer for the syntax highlighter and the intellisense to enable ease-of-use, and for a more comfortable language support.
- Implementing some .NET-Reflection support for the intellisense to let it handle .NET based scripting easier.
- Replacing the
TreeView with a tinier container, but keeping the easy design-time edit function that
- 2008.09.08 - Version 1.0.