Click here to Skip to main content
Click here to Skip to main content

CodeTextBox - another RichTextBox control with syntax highlightning and intellisense

, 8 Sep 2008
Rate this:
Please Sign up or sign in to vote.
A RichTextBox control with syntax highlightning and intellisense.

Introduction

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. Smile | :) 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. Smile | :)

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.

CodeTextBox properties

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: codeTextBox1.UpdateSyntaxHightlight();.

  • 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 Name and 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 Tag property.

Limitations, Ideas

I know that it's not perfect yet, but hey, it's useable... Smile | :) 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...

Limitations:

As in most syntax highlighters, I cannot handle C-style comment blocks, and keywords like #region.

Ideas:

  • 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 TreeView has.

References

History

  • 2008.09.08 - Version 1.0.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Tamas Honfi
Software Developer (Senior) Moonlight Studios
Hungary Hungary
I'm working as a software developer since 2005 mostly using C# and MS SQL Server for building windows and web applications. I have 3 years experience in developing CRM softwares, but I'm also interested in Game development using C++, DirectX, and C#-XNA.
I'm always open for new technologies, preferring code reusability, stability, and "nice solutions".

Comments and Discussions

 
QuestionDoen't work! Error: Resource not available! PinmemberC4RL.026-Sep-13 22:59 
AnswerRe: Doen't work! Error: Resource not available! PinmemberWrangly15-Oct-13 2:01 
AnswerRe: Doen't work! Error: Resource not available! PinmemberMember 93225358-Dec-13 13:43 
Questionhow I can use intellisense separately Pinmemberluislasonbra6-Apr-13 9:18 
GeneralMy vote of 5 PinmemberGreg_han21-Jan-13 18:07 
GeneralVery Good Work PinmemberDnyaneshwar Kotwal19-Aug-12 20:00 
QuestionSuggestions PinmemberMember 858171531-Jan-12 15:37 
Suggestions:
Make your codeTextBox think like a compiler. Once in a while, look for /*, and highlight green until */.
If it finds a #region, just highlight it!
AnswerSuper PinmemberMember 85241598-Jan-12 8:18 
Questiongood attempt Pinmemberleosco18-Nov-11 5:20 
GeneralNot adding the textbox to the toolbox Pinmember501st_commander17-Nov-10 12:08 
GeneralRe: Not adding the textbox to the toolbox PinmemberMember 858171531-Jan-12 15:38 
GeneralMy vote of 5 PinmemberAmir Mehrabi-Jorshary1-Nov-10 22:16 
GeneralGood work, some critique PinmemberBigdeak10-Jun-10 0:12 
GeneralGreat job. Pinmemberetsimber2-Jun-10 3:15 
GeneralConverting to silvellight PinmemberAndrusM19-Apr-10 4:53 
GeneralWell Done! PinmemberChristo66719-Apr-10 4:35 
GeneralHelp [modified] Pinmemberleosco17-Dec-09 4:05 
Generalnot efficient Pinmemberhsj52802-Feb-09 4:13 
GeneralRe: not efficient PinmemberChristo66719-Apr-10 4:39 
GeneralRemove pinove call to run under moni, imporve speed PinmemberAndrusM20-Oct-08 5:24 
GeneralRe: Remove pinove call to run under moni, imporve speed PinmemberThe_Mega_ZZTer23-Jun-09 16:05 
GeneralRe: Remove pinove call to run under moni, imporve speed PinmemberChristo66719-Apr-10 4:46 
GeneralCannot open with Visual Studio 2005 express Pinmemberg.bude17-Sep-08 1:02 
GeneralOr Visual Studio 2005 Pro Pinmembereddiem914-Oct-08 17:10 
GeneralRe: Or Visual Studio 2005 Pro PinmemberTamas Honfi14-Oct-08 22:52 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web01 | 2.8.140827.1 | Last Updated 8 Sep 2008
Article Copyright 2008 by Tamas Honfi
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid