原文地址链接:
http://www.codeproject.com/Articles/161871/Fast-Colored-TextBox-for-syntax-highlighting
源码、样例、帮助文档下载地址:
http://download.csdn.net/detail/eyuanatqqdotcom/4667849
说明
在多个项目中,我都迫切地感觉到我需要一个代码高亮的文本编辑器。
最初,我使用了一个继承自RichTextBox
的控件,但是随后我发现,在对大量文本数据的处理上,对大量片段(超过200个)进行着色,RichTextBox太慢了。
因为这种高亮方式是以动态的方式执行的,太带来了一个严重的问题。
因此我创建了自己的文本编辑器组建,它没有使用TextBox或者RichTextBox。
仅通过使用GDI+来实现。
该组建对于大量代码的着色速度非常快,而且也可以动态地对代码着色。
可以对反复出现的文本符号设定背景色、字体、前景色等。
可以使用正则表达式、文本折叠、查找替换、代码这贴,多不撤销\重做。
实现
为了存储文本中的字符使用了字符结构体。
public struct Char
{
public char c;
public StyleIndex style;
}
The structure keeps the symbol (char
, 2 bytes) and style index mask (StyleIndex
, 2 bytes). Thus, on each character of text consumes 4 bytes of memory. Symbols are grouped into lines, which are implemented usingList<Char>
.
StyleIndex
is mask of styles indices, applied to this character. Each bit ofStyleIndex
means that this symbol will be drawn by appropriate style. BecauseStyleIndex
has 16 bits, control supports no more than 16 different styles.
Styles are stored in a separate list:
public readonly Style[] Styles = new Style[sizeof(ushort)*8];
In fact, Style
is renderer of chars, backgrounds, borders and other design elements of the text.
Below is a typical implementation of one of the styles for rendering text characters:
public class TextStyle : Style
{
public Brush ForeBrush { get; set; }
public Brush BackgroundBrush { get; set; }
public FontStyle FontStyle { get; set; }
public override void Draw(Graphics gr, Point position, Range range)
{
//draw background
if (BackgroundBrush != null)
gr.FillRectangle(BackgroundBrush, position.X, position.Y,
(range.End.iChar - range.Start.iChar) *
range.tb.CharWidth, range.tb.CharHeight);
//draw chars
Font f = new Font(range.tb.Font, FontStyle);
Line line = range.tb[range.Start.iLine];
float dx = range.tb.CharWidth;
float y = position.Y - 2f;
float x = position.X - 2f;
Brush foreBrush = this.ForeBrush ?? new SolidBrush(range.tb.ForeColor);
for (int i = range.Start.iChar; i < range.End.iChar; i++)
{
//draw char
gr.DrawString(line[i].c.ToString(), f, foreBrush, x, y);
x += dx;
}
}
}
TextStyle
contains foreground color, background color and font style of the text. When creating a new style, component checks style on its list, and if there is no style, it creates a new style, with its index.
You can create custom styles, inherited from Style
class.
To work with fragments of text, the class Range
was used, representing a continuous block of text, given the initial and final positions:
public class Range
{
Place start;
Place end;
}
public struct Place
{
int iLine;
int iChar;
}
使用该代码
语法高亮
不同于RickTextBox,该组建没有使用 RTF.
符号的颜色和样式仅存放于组件自身中。
It means that the coloring of the component has to be redone every time when entering text. In this case, the event TextChanged
is applied.
A Range
object which contains the information about modified text range pass into the eventTextChanged
. It permits the highlighting of the altered text fragment only.
For the search of fragments of text which need to be colored, it is possible to employ overloaded methodRange.
SetStyle()
which accepts search pattern (regular expression). For example, the following code can be used for the search and coloring of the comments of C# code (the part of the line starting from two forward slashes):
Style GreenStyle = new TextStyle(Brushes.Green, null, FontStyle.Italic);
...
private void fastColoredTextBox1_TextChanged(object sender, TextChangedEventArgs e)
{
//clear style of changed range
e.ChangedRange.ClearStyle(GreenStyle);
//comment highlighting
e.ChangedRange.SetStyle(GreenStyle, @"//.*$", RegexOptions.Multiline);
}
Before beginning the coloring call, the method Range.ClearStyle()
is used to clean out and delete the previous style.
The method SetStyle()
highlights the text fragment corresponding to a regular expression. However, if the expression includes the named group "range
", the group with a name "range
" is highlighted. The name of the class which comes after the key words "class
", "struct
" and "enum
" was bolded in the following example:
e.ChangedRange.SetStyle(BoldStyle, @"\b(class|struct|enum)\s+(?<range>[\w_]+?)\b");
The event handler TextChanged
utilized for coloring C#, VB, HTML and other languages syntax was implemented in demo application.
Apart from the event TextChanged
the events TextChanging
,VisibleRangeChanged
and SelectionChanged
may happen to be useful. The eventTextChanging
appears before the text starts to be modified. The eventSelectionChanged
occurs after the change of the cursor position in the component or while a selected fragment of text is being modified.
代码折叠
Control allows to hide blocks of text. To hide the selected text, use method CollapseBlock()
:
fastColoredTextBox1.CollapseBlock(fastColoredTextBox1.Selection.Start.iLine,
fastColoredTextBox1.Selection.End.iLine);
The result is shown in the picture:
The component supports automatic search for fragments of collapse (folding area). To set the pattern (Regex) to find the beginning and end of folding block, use methodRange.SetFoldingMarkers()
in TextChanged
handler.
For example, to search of blocks {..}
and #region .. #endregion
, use next handler:
private void fastColoredTextBox1_TextChanged(object sender, TextChangedEventArgs e)
{
//clear folding markers of changed range
e.ChangedRange.ClearFoldingMarkers();
//set folding markers
e.ChangedRange.SetFoldingMarkers("{", "}");
e.ChangedRange.SetFoldingMarkers(@"#region\b", @"#endregion\b");
}
The result is shown in the picture:
Folding blocks can be nested into each other.
Collapsed block can be opened by doubleclick on it, or click on marker '+'. Single click on folded area selects hidden block. Also, you can open hidden block programmatically byExpandBlock()
method.
Demo application contains sample for collapse all #region...#endregion
blocks of the text.
In addition to hiding the text, folding blocks help visually define the boundaries of the block where the caret is located. For this purpose, the left side of the control draws a vertical line (folding indicator). It shows the beginning and end of the current folding block, in which the caret is located.
Delayed Handlers
Many events (TextChanged
, SelectionChanged
, VisibleRangeChanged
) have a pending version of the event. A deferred event is triggered after a certain time after the occurrence of major events.
What does this mean? If the user enters text quickly, then the TextChanged
is triggered when you enter each character. And event TextChangedDelayed
works only after the user has stopped typing. And only once.
It is useful for lazy highlighting of large text.
Control supports next delayed events: TextChangedDelayed
, SelectionChangedDelayed
,VisibleRangeChangedDelayed
. Properties DelayedEventsInterval
and DelayedTextChangedInterval
contain time of pending.
Export to HTML
Control has property Html
. It returns HTML version of colored text. Also you can useExportToHTML
class for more flexibility of export to HTML. You can use export to HTML for printing of the text, or for coloring of the code of your web-site.
Clipboard
Control copies the text in two formats - Plain text and HTML.
If the target application supports inserting HTML (e.g. Microsoft Word) then will be inserted colored text. Otherwise (such as Notepad) will be inserted plain text.
Hotkeys
Control supports next hotkeys:
- Left, Right, Up, Down, Home, End, PageUp, PageDown - moves caret
- Shift+(Left, Right, Up, Down, Home, End, PageUp, PageDown) - moves caret with selection
- Ctrl+F, Ctrl+H - shows Find and Replace dialogs
- F3 - find next
- Ctrl+G - shows GoTo dialog
- Ctrl+(C, V, X) - standard clipboard operations
- Ctrl+A - selects all text
- Ctrl+Z, Alt+Backspace, Ctrl+R - Undo/Redo opertions
- Tab, Shift+Tab - increase/decrease left indent of selected range
- Ctrl+Home, Ctrl+End - go to first/last char of the text
- Shift+Ctrl+Home, Shift+Ctrl+End - go to first/last char of the text with selection
- Ctrl+Left, Ctrl+Right - go word left/right
- Shift+Ctrl+Left, Shift+Ctrl+Right - go word left/right with selection
- Ctrl+-, Shift+Ctrl+- - backward/forward navigation
- Ctrl+U, Shift+Ctrl+U - converts selected text to upper/lower case
- Ctrl+Shift+C - inserts/removes comment prefix in selected lines
- Ins - switches between Insert Mode and Overwrite Mode
- Ctrl+Backspace, Ctrl+Del - remove word left/right
- Alt+Mouse, Alt+Shift+(Up, Down, Right, Left) - enables column selection mode
- Alt+Up, Alt+Down - moves selected lines up/down
- Shift+Del - removes current line
Brackets Highlighting
Control has built-in brackets highlighting. Simply set properties LeftBracket
and RightBracket
. If you want to disable brackets highlighting, set it to '\x0
'. For adjust color of highlighting, use propertyBracketsStyle
. For adjusting of time of pending of highlighting, changeDelayedEventsInterval
.
Interactive Styles
You can create own interactive(clickable) styles. To do this, derive your class from theStyle
, and call AddVisualMarker()
from your overridden Draw()
method. To handle a click on the marker, use eventsFastColoredTextBox.VisualMarkerClick
or Style.VisualMarkerClick
or override method Style.OnVisualMarkerClick()
.
Also you can use built-in style ShortcutStyle
. This class draws little clickable rectangle under last char of range.
Styles Priority
Each char
can contain up to 16 different styles. Therefore, the matter in which order these styles will be drawn. To explicitly specify the order of drawing, use the methodFastColoredTextBox.AddStyle()
:
fastColoredTextBox1.AddStyle(MyUndermostStyle);
fastColoredTextBox1.AddStyle(MyUpperStyle);
fastColoredTextBox1.AddStyle(MyTopmostStyle);
This methods must be called before any calls of Range.SetStyle()
. Otherwise, the draw order will be determined by the order of calls of methodsRange.SetStyle()
.
Note: By default, control draws only one TextStyle
(or inherited) style - undermost from all. However, you can enable the drawing of the symbol in manyTextStyle
, using the property FastColoredTextBox.AllowSeveralTextStyleDrawing
. This applies only toTextStyle
(or inherited) styles, other styles(inherited from Style
) are drawn in any case.
If char
has not any TextStyle
, it will drawing by FastColoredTextBox.DefaultStyle
. DefaultStyle
draws over all other styles.
Call method ClearStyleBuffer()
if you need reset order of drawing.
Also, to adjust the look of text, you can apply a semitransparent color in your styles.
Built-in highlighter
FastColoredTextBox
has built-in syntax highlighter for languages: C#, VB, HTML, SQL, PHP, JS.
Note: You can create own syntax highlighter for any language.
Property HighlightingRangeType
specifies which part of the text will be highlighted as you type (by built-in highlighter). ValueChangedRange
provides better performance. Values VisibleRange
andAllTextRange
- provides a more accurate highlighting (including multiline comments), but with the loss of performance.
Multiline Comments Highlighting
If your custom language supports multiline comments or other multiline operators, you may encounter a problem highlighting such operators. PropertyChangedRange
from TextChanged
event contains only changed range of the text. But multiline comments is larger thanChangedRange
, from what follows incorrect highlighting. You can solve this problem in the following way: InTextChanged
handler use VisibleRange
or Range
property of FastColoredTextBox
instead of ChangedRange
. For example:
private void fastColoredTextBox1_TextChanged(object sender, TextChangedEventArgs e)
{
//old edition
//Range range = e.ChangedRange;
//new edition
Range range = (sender as FastColoredTextBox).VisibleRange;//or (sender as
//FastColoredTextBox).Range
//clear style of changed range
range.ClearStyle(GreenStyle);
//comment highlighting
range.SetStyle(GreenStyle, @"//.*$", RegexOptions.Multiline);
range.SetStyle(GreenStyle, @"(/\*.*?\*/)|(/\*.*)", RegexOptions.Singleline);
range.SetStyle(GreenStyle, @"(/\*.*?\*/)|(.*\*/)", RegexOptions.Singleline |
RegexOptions.RightToLeft);
}
Note: Using VisibleRange
instead of ChangedRange
decreases performance of the control.
Note: If you use built-in highlighter, you can adjust property HighlightingRangeType
.
Using XML Syntax Descriptors
Component can use the XML file for syntax highlighting. File name specified in the propertyDescriptionFile
.
For highlighting, you need to set the Language
property to Custom
.
The file may contain information about styles, rules of syntax highlighting, folding parameters and brackets.
Below is a list of valid tags and attributes to them:
<doc>...</doc>
- root XML node.<brackets left="..." right="..." left2="..." right2="..." />
- sets the brackets for highlighting<style name="..." color="..." backColor="..." fontStyle="..." />
- sets the style called name. Tag<style>
creates only styles of typeTextStyle
.color
andbackColor
determine foreground and background color. Allowed as astring
color name or hex representation of the form #RGB or #ARGB.fontStyle
- enumeration ofFontStyle
parameters.
The sequence tags<style>
determines the order of rendering these styles.<rule style="..." options="...">regex pattern</rule>
- sets rule of highlighting.style
- style name described in the tags<style>
.options
- enumeration ofRegexOptions
parameters. The contents of the tag - regex pattern for highlighting.<folding start="..." finish="..." options="...">
- specifies the rules for folding.start
andfinish
set regular expressions to the beginning and end of the block.options
- enumeration ofRegexOptions
parameters.
Below is an example XML file for syntax highlighting HTML:
<doc>
<brackets left="<" right=">" />
<style name="Maroon" color="Maroon" fontStyle="Bold,Italic" />
<style name="Blue" color="Blue"/>
<style name="Red" color="Red" backColor="#f5f5e5" />
<rule style="Blue"><|/>|</|></rule>
<rule style="Maroon"><(?<range>[!\w\d]+)</rule>
<rule style="Maroon"></(?<range>[\w\d]+)></rule>
<rule style="Red" options="Multiline">(?<range>\S+?)='[^']*
'|(?<range>\S+)="[^"]*"|(?<range>\S+)=\S+</rule>
<folding start="<div" finish="</div>" options="IgnoreCase"/>
</doc>
Backward/Forward Navigation
Control remembers lines in which the user has visited. You can return to the previous location by pressing [Ctrl + -] or callNavigateBackward()
. Similarly, [Ctrl + Shift + -] and the method NavigateForward()
.
You can also use the property Line.LastVisit
for information on the last visit to this line. In the examplePowerfulCSharpEditor
this property is used for navigation in multitab mode, when you have multiple documents open.
Hieroglyphs and Wide Characters
Control supports input and display hieroglyphs and other wide characters (CJK languages, Arabic and other). Also Input Method Editor (IME) is supported.
To enable this feature to switch the property ImeMode
to the state On.
Demo contains a sample of IME features usage.
Note: For a normal display wide characters may require a larger font size.
Note: Enabled IME mode can decrease performance of control.
Autocomplete
The library has class AutocompleteMenu
to implement autocompleting functionality (like IntelliSense popup menu).
AutocompleteMenu
contains a list of AutocompleteItem
. It supports displaying, filtering and inserting of items.
You can use AutocompleteMenu
for code snippets, keywords, methods and properties hints.
Notice to such properties and methods as Fragment
, SearchPattern
,MinFragmentLength
, Items.ImageList
, Items.SetAutocompleteItems()
.
You can override class AutocompleteItem
for more flexibility of functionality.
Also, you can use more advanced control AutocompleteMenu[^].AutocompleteMenu
is fully compatible with FastColoredTextBox.
See AutocompleteSample
and AutocompleteSample2
for more information.
AutoIndent
When the user is typing, and enabled AutoIndent
, control automatically determines the left indent for the input string.
By default, the indentation made on the markers of Code Folding. But, if you select a specificLanguage
, then padding makes integrated highlighter for appropriate language.
You can set their own rules for indentation.
Use the event AutoIndentNeeded
.
The handler must return two values: Shift
and ShiftNextLines
.
Shift
value indicates indention of this line relative to the previous line (in characters, can be negative).ShiftNextLines
value indicates a indent will be applied to the subsequent lines after this.
The pictures show some possible variants:
Example of AutoIndentNeeded
handler shown in AutoIndentSample.
Note: If you handle AutoIndentNeeded
event, built-in highlighter's indention will disabled.
Also, you can manually make AutoIndent
of selected text. Simply call DoAutoIndent()
method. The below picture shows text before calling:
And this is picture after DoAutoIndent()
calling:
Printing
The component has built-in printing functionality. For print all text or selected range, call methodPrint()
. You can specify which dialog boxes to show, by passing the objectPrintDialogSettings
. By default, the method makes printing of all text, without dialog boxes.
Lazy file loading
To work with files of extremally large size (100k lines and more) can be a useful "lazy" mode. In this mode, the control opens the file and reads its parts, as needed. Unused pieces of text are deleted from memory. This mode is supported by three methods:
OpenBindingFile()
- Opens file for reading (in exclusive mode).
CloseBindingFile()
- Closes opened file. After call the control returns to simple (non lazy) mode.
SaveToFile()
- Saves text to the file. After this method, control will be binded to new file. This method can be used in simple (non lazy) mode too.
Split-screen mode
The control has property SourceTextBox
of typeFastColoredTextBox
. If you set this property to another textbox, both the controls will display the same text. This mode can be used to split the screen, where you can edit the same text in different places.
Column selection mode
The component supports column selection mode. When its activated, user can work with vertical fragment of the text:
To enable column selection mode, press Alt key and select area by mouse. Another way - press Alt+Shift and select area by arrow keys. To switch off this mode simply click on the control or press any arrow key.
Column selection mode supports text inputting (include Del and Backspace, but exclude insert or delete lines), clipboard operations, clear selection, undo/redo operations.
Arrow keys(Right, Left, Up, Down, etc) switches off column mode.
Also, if you call methods Text{set;}
orAppendText
, column mode switches off. Methods InsertText
andSelectedText
do not change selection mode.
If you want prorgammatically enable/disable selection mode, use propertySelection.ColumnSelectionMode
.
Wordwrap mode does not support column selection.
Layout and colors
Below shown some layout and color properties:
Compact Framework Version
The control works under .NET Compact Framework 2.0. This means that you can use it for mobile platforms (PocketPC, Smartphones, PDA etc). CF version supports all features except the following:
The remaining features are presented, only slightly different from the full version. |
Samples
Demo application has many samples. Below is a brief description:
- Powerful sample. Contains many features: syntax highlighting, code folding, export, same words highlighting and other.
- PowerfulCSharpEditor. Powerful multitab C# source files editor. Supports highlighting, multitab backward/forward navigation, dynamic methods list, autocomplete and other.
- Simplest syntax highlighting sample. Shows how to make simplest syntax highlighting.
- Marker sample. Shows how to make marker tool. Sample uses class
ShortcutStyle
for create clickable markers on text area:Custom style sample. This example shows how to create own custom style. Next custom style draws frame around of the words:
class EllipseStyle : Style { public override void Draw(Graphics gr, Point position, Range range) { //get size of rectangle Size size = GetSizeOfRange(range); //create rectangle Rectangle rect = new Rectangle(position, size); //inflate it rect.Inflate(2, 2); //get rounded rectangle var path = GetRoundedRectangle(rect, 7); //draw rounded rectangle gr.DrawPath(Pens.Red, path); } }
- VisibleRangeChangedDelayed usage sample. This example shows how to highlight syntax for extremely large text by
VisibleRangeChangedDelayed
event. - Simplest code folding sample. This example shows how to make simplest code folding.
- Custom code folding sample. This example shows how to make costom code folding (on example of Python).
- Autocomplete sample, Autocomplete sample 2. Examples show how to create autocomplete functionality:
- Tooltip sample. It shows tooltips for words under mouse.
- Dynamic highlighting sample. Shows how to make dynamic syntax highlighting. This example finds the functions declared in the program and dynamically highlights all of their entry into the code of LISP.
- Syntax highlighting by XML Description. This example uses XML file for description syntax highlighting.
- IMEmode sample.This example supports IME entering mode and rendering of wide characters.
- Image drawing sample. Sample shows how to draw images instead of text:
This example supports animated GIF too. - AutoIndent sample. Sample shows how to make custom autoindent functionality.
- BookmarksSample. Sample shows how to make bookmarks functionality.
- Logger sample. It shows how to add text with predefined style:
- Split sample. It shows how to make split-screen mode:
- Lazy loading sample. It shows how to work with files of extremally large size.
- Console sample. It shows how to create console emulator.
- Joke sample. It contains some additional features, implemented custom
TextStyle
: -
Performance
For storing one megabyte of text requires approximately 6 MB of RAM (include undo/redo stack objects). The coloring does not consume significant resources.
The use of regular expressions and saving memory usage, allow to reach high performance component. I tested the file of 50,000 lines (about 1.6 MB) of C# code. The total time of insertion, and the syntax coloring was about 3 seconds. Further work with the text passed without significant delays.
Restrictions
The component does not support center or right alignment and uses only monospaced fonts.
History
- 26 Feb 2011 - Added Find/Replace functionality, indent stuff, showing of line numbers. Also added VB syntax highlighting.
- 28 Feb 2011 - Added code folding functionality (include current block highlighting). Added some features (caret blinking, increase/decrease indent of selected text). Optimized
ReplaceAll
functionality. Added HTML syntax highlighting. Increased general performance of control. - 2 Mar 2011 - Style logic was revised. Added HTML export. Added many samples. Added many features...
- 3 Mar 2011 - Increased performance. Fixed some bugs. Added SQL, PHP syntax highlighting examples. Brackets highlighting is built-in now. Some hotkeys was added.
- 4 Mar 2011 -
FastColoredTextBox
now supports built-in syntax highlighter for languages: C#, VB, HTML, SQL, PHP. - 8 Mar 2011 - Added XML syntax descriptors. Fixed some bugs of font rendering.
- 14 Mar 2011 - Added Backward/Forward navigation. Added IME mode and CJK languages support. Added powerful C# multitab editor sample.
- 25 Mar 2011 - Added following features: colored text copy, auto indent for new line, insert/remove comment prefix for selected lines, uppercase/lowercase transformation of selected text. Fixed scroll flicker. Fixed some bugs. Added image drawing sample.
- 7 Apr 2011 - Added
AutocompleteMenu
class.Autocomplete
sample was revised. Some other features was added. - 15 Apr 2011 -
AutoIndent
was revised. Added printing functionality. - 30 May 2011 - Control was downgraded from FW3.5 to FW2.0.
- 8 Jun 2011 - Added .NET Compact Framework 2.0 version. Added some features. Some bugs was fixed. Performance was increased.
- 18 Jun 2011 - License was changed from GPLv3 to LGPLv3. Now you can use control in proprietary software.
- 29 Jun 2011 - Changed behaviour of AutoIndent, Home key, word selection (Really, I made the PHP editor for myself, and discovered that these functions are inconvenient. Added some methods, events and properties (
LineInserted
,LineRemoved
,Line.UniqueId
). AddedBookmarksSample
. Built-in highlighter was improved. Fixed some flicker. - 17 Aug 2011 - Improved support for multiline comments and operators (see property
HighlightingRangeType
). Fixed some bugs. - 6 Jan 2012 - Some bugs was fixed. Autocomplete menu was improved.
- 4 Feb 2012 - Added split-screen mode, lazy file loading, overwrite mode. Performance was increased. Some bugs was fixed.
- 13 Mar 2012 - Added some properties and samples. Some bugs was fixed.
- 30 Apr 2012 - Bugfixing, small changes of keys behaviour, selecting and autoindent.
- 2 May 2012 - Column selection mode was added.
- 26 Sep 2012 - Some bugs was fixed. Changed some key's behaviour. Added printing of line numbers. Added bilingual sample. Added hotkeys for remove current line and move selected lines up/down.
- Tooltip sample. It shows tooltips for words under mouse.
- Dynamic highlighting sample. Shows how to make dynamic syntax highlighting. This example finds the functions declared in the program and dynamically highlights all of their entry into the code of LISP.
- Syntax highlighting by XML Description. This example uses XML file for description syntax highlighting.
- IMEmode sample.This example supports IME entering mode and rendering of wide characters.
- Image drawing sample. Sample shows how to draw images instead of text:
This example supports animated GIF too. - AutoIndent sample. Sample shows how to make custom autoindent functionality.
- BookmarksSample. Sample shows how to make bookmarks functionality.
- Logger sample. It shows how to add text with predefined style:
- Split sample. It shows how to make split-screen mode:
- Lazy loading sample. It shows how to work with files of extremally large size.
- Console sample. It shows how to create console emulator.
- Joke sample. It contains some additional features, implemented custom
TextStyle
:Performance
For storing one megabyte of text requires approximately 6 MB of RAM (include undo/redo stack objects). The coloring does not consume significant resources.
The use of regular expressions and saving memory usage, allow to reach high performance component. I tested the file of 50,000 lines (about 1.6 MB) of C# code. The total time of insertion, and the syntax coloring was about 3 seconds. Further work with the text passed without significant delays.
Restrictions
The component does not support center or right alignment and uses only monospaced fonts.
History
- 26 Feb 2011 - Added Find/Replace functionality, indent stuff, showing of line numbers. Also added VB syntax highlighting.
- 28 Feb 2011 - Added code folding functionality (include current block highlighting). Added some features (caret blinking, increase/decrease indent of selected text). Optimized
ReplaceAll
functionality. Added HTML syntax highlighting. Increased general performance of control. - 2 Mar 2011 - Style logic was revised. Added HTML export. Added many samples. Added many features...
- 3 Mar 2011 - Increased performance. Fixed some bugs. Added SQL, PHP syntax highlighting examples. Brackets highlighting is built-in now. Some hotkeys was added.
- 4 Mar 2011 -
FastColoredTextBox
now supports built-in syntax highlighter for languages: C#, VB, HTML, SQL, PHP. - 8 Mar 2011 - Added XML syntax descriptors. Fixed some bugs of font rendering.
- 14 Mar 2011 - Added Backward/Forward navigation. Added IME mode and CJK languages support. Added powerful C# multitab editor sample.
- 25 Mar 2011 - Added following features: colored text copy, auto indent for new line, insert/remove comment prefix for selected lines, uppercase/lowercase transformation of selected text. Fixed scroll flicker. Fixed some bugs. Added image drawing sample.
- 7 Apr 2011 - Added
AutocompleteMenu
class.Autocomplete
sample was revised. Some other features was added. - 15 Apr 2011 -
AutoIndent
was revised. Added printing functionality. - 30 May 2011 - Control was downgraded from FW3.5 to FW2.0.
- 8 Jun 2011 - Added .NET Compact Framework 2.0 version. Added some features. Some bugs was fixed. Performance was increased.
- 18 Jun 2011 - License was changed from GPLv3 to LGPLv3. Now you can use control in proprietary software.
- 29 Jun 2011 - Changed behaviour of AutoIndent, Home key, word selection (Really, I made the PHP editor for myself, and discovered that these functions are inconvenient. Added some methods, events and properties (
LineInserted
,LineRemoved
,Line.UniqueId
). AddedBookmarksSample
. Built-in highlighter was improved. Fixed some flicker. - 17 Aug 2011 - Improved support for multiline comments and operators (see property
HighlightingRangeType
). Fixed some bugs. - 6 Jan 2012 - Some bugs was fixed. Autocomplete menu was improved.
- 4 Feb 2012 - Added split-screen mode, lazy file loading, overwrite mode. Performance was increased. Some bugs was fixed.
- 13 Mar 2012 - Added some properties and samples. Some bugs was fixed.
- 30 Apr 2012 - Bugfixing, small changes of keys behaviour, selecting and autoindent.
- 2 May 2012 - Column selection mode was added.
- 26 Sep 2012 - Some bugs was fixed. Changed some key's behaviour. Added printing of line numbers. Added bilingual sample. Added hotkeys for remove current line and move selected lines up/down.