Click here to Skip to main content
12,250,546 members (48,250 online)
Click here to Skip to main content
Add your own
alternative version

Stats

3M views
79.4K downloads
1.1K bookmarked
Posted

Fast Colored TextBox for syntax highlighting

, 30 Jun 2011 LGPL3
Rate this:
Please Sign up or sign in to vote.
Custom text editor with syntax highlighting
This is an old version of the currently published article.
fastcoloredtextbox1.png

Introduction

For one of my projects I have felt the need of a text editor with syntax highlighting. At first I used a component inherited from RichTextBoх, but while using it for a large amount of text I found out that RichTextBoх highlights very slowly a large number of colored fragments (from 200 and more). When such highlighting has to be made in a dynamic way, it causes a serious problem.

Therefore I created my own text component which uses neither Windows TextBox nor RichTextBoх.

The rendering of a text was made completely only by the means of GDI+.

The component works fast enough with a large amount of text and also possesses tools to make comfortably dynamic syntax highlighting.

It has such settings as foreground color, font style, background color which can be adjusted for arbitrarily selected text symbols. One can easily gain access to a text with the use of regular expressions. WordWrap, Find/Replace, Code folding and multilevel Undo/Redo are supported as well.

Implementation

For storage of characters of text, structure Char is used:

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 using List<Char>.

StyleIndex is mask of styles indices, applied to this character. Each bit of StyleIndex means that this symbol will be drawn by appropriate style. Because StyleIndex 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, was used the class Range, 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;
}

Using the code

Syntax highlighting

Unlike RichTextBoх, the component does not use RTF. The information about the color and type of symbols is kept only in the component. 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 event TextChanged. 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 method Range.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 event TextChanging appears before the text starts to be modified. The event SelectionChanged occurs after the change of the cursor position in the component or while a selected fragment of text is being modified.

Code folding

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:

foldingSelection.png

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 method Range.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:

FoldingMarkers.png

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 by ExpandBlock() 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 work 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 use ExportToHTML 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. MS 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
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 - converts selected text to upper/lower case
Ctrl+Shift+C - inserts/removes comment prefix in selected lines

Brackets highlighting

Control has built-in brackets highlighting. Simply set properties LeftBracket and RightBracket. If you want disable brackets highlighting, set it to '\x0'. For adjust color of highlighting, use property BracketsStyle. For adjusting of time of pending of highlighting, change DelayedEventsInterval.

Interactive styles

You can create own intercative(clickable) styles. To do this, derive your class from the Style, and call AddVisualMarker() from your overrided 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 method FastColoredTextBox.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 methods Range.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 many TextStyle, using the property FastColoredTextBox.AllowSeveralTextStyleDrawing. This applies only to TextStyle(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 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.
Note: You can create own syntax highlighter for any language.

Using XML syntax descriptors

Component can use the XML file for syntax highlighting. File name specified in the property DescriptionFile.

For highlighting 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 type TextStyle. color and backColor determine foreground and background color. Allowed as a string color name or hex representation of the form #RGB or #ARGB. fontStyle - enumeration of FontStyle 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 of RegexOptions parameters. The contents of the tag - regex pattern for highlighting.
  • <folding start="..." finish="..." options="..."> - specifies the rules for folding. start and finish set regular expressions to the beginning and end of the block. options - enumeration of RegexOptions parameters.

Below is an example XML file for syntax highlighting HTML:

<doc>
    <brackets left="&lt;" right="&gt;" />
    <style name="Maroon" color="Maroon" fontStyle="Bold,Italic" />
    <style name="Blue" color="Blue"/>
    <style name="Red" color="Red" backColor="#f5f5e5" />
    <rule style="Blue">&lt;|/&gt;|&lt;/|&gt;</rule>
    <rule style="Maroon">&lt;(?&lt;range&gt;[!\w\d]+)</rule>
    <rule style="Maroon">&lt;/(?&lt;range&gt;[\w\d]+)&gt;</rule>
    <rule style="Red" options="Multiline">(?&lt;range&gt;\S+?)='[^']*'|(?&lt;range&gt;\S+)="[^"]*"|(?&lt;range&gt;\S+)=\S+</rule>
    <folding start="&lt;div" finish="&lt;/div&gt;" 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 call NavigateBackward(). 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 example PowerfulCSharpEditor 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 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 autocompliting functionality (like IntelliSense popup menu).
AutocompleteMenu contains 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.

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 specific Language, 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:

AutoIndent1.png

And

AutoIndent2.png

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. Below picture show text before calling:

AutoIndentExample1.png

And this is picture after DoAutoIndent() calling:

AutoIndentExample2.png

Printing

The component has built-in printing functionality. For print all text or selected range, call method Print(). You can specify which dialog boxes to show, by passing the object PrintDialogSettings. By default, the method makes printing of all text, without dialog boxes.

Compact Framework version

FCTB_CF.PNG

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:

  • IME mode and wide characters are not supported.
  • AutocompleteMenu is not supported.
  • Built-in printing is not supported.

The remaining features are presented, with 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.Powerfull multitab C# source files editor. Supports highlighting, multitab backward/forward navigation, dynamic methods list, autocomplete and other.

    CSharpEditor.png
  • 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:

    MarkerToolSample.png

  • 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);
        }
    }
    

    CustomStyle.png
  • VisibleRangeChangedDelayed usage sample. This example shows how to highlight syntax for extremally large text by VisibleRangeChangedDelayed event.
  • Simplest code folding sample. This example shows how to make simplest code folding.
  • Autocomplete sample, Autocomplete sample 2. Examples show how to create autocomplete functionality:

    Autocomplete1.png
  • Dynamic highlighting sample. Shows how to make dinamic 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.

    IME.png
  • Image drawing sample. Sample shows how to draw images instead text:

    smile.png
  • AutoIndent sample. Sample shows how to make custom autoindent functionality.
  • BookmarksSample. Sample shows how to make bookmarks functionality.
  • Joke sample Smile | :) Some additional features. Implemented custom TextStyle:

    JokeSample.png

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 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, automatical Drag&Drop and uses only monospaced fonts.

History

  • 26 Feb 2011 - Added Find/Replace functionality, indent stuffs, 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... Smile | :)
  • 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 powerfull C# multitab editor sample.
  • 25 Mar 2011 - Added next 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 Framewrok 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 done PHP editor for myself, and discovered that this functions are inconvenient Smile | :) Added some methods, events and properties (LineInserted, LineRemoved, Line.UniqueId). Added BookmarksSample. Built-in highlighter was improved. Fixed some flicker.

License

This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)

Share

About the Author

Pavel Torgashov
Software Developer Freelancer
Ukraine Ukraine
I am Pavеl Tоrgаshоv, and I live in Kyiv, Ukraine.
I've been developing software since 1998.
Main activities: processing of large volumes of data, statistics, computer vision and graphics.

You can help me to develop free components.
My Skrill: p_torgashov[at]ukr.net

You may also be interested in...

Comments and Discussions


Discussions posted for the Published version of this article. Posting a message here will take you to the publicly available article in order to continue your conversation in public.
 
QuestionUsing in VB.Net Pin
jgDiablo16-Apr-16 7:37
memberjgDiablo16-Apr-16 7:37 
QuestionShowing autocomplete menu during typing Pin
MazdakShojaie15-Apr-16 23:16
memberMazdakShojaie15-Apr-16 23:16 
GeneralMy vote of 5 Pin
Jan Zumwalt15-Apr-16 6:44
memberJan Zumwalt15-Apr-16 6:44 
QuestionHELP! Stand alone simple examples Pin
Jan Zumwalt15-Apr-16 6:42
memberJan Zumwalt15-Apr-16 6:42 
QuestionMultiline Highlighting Pin
Member 428995025-Mar-16 23:05
memberMember 428995025-Mar-16 23:05 
AnswerRe: Multiline Highlighting Pin
Pavel Torgashov4-Apr-16 14:12
professionalPavel Torgashov4-Apr-16 14:12 
QuestionAutocomplete issue Pin
EnDee32116-Mar-16 22:52
memberEnDee32116-Mar-16 22:52 
AnswerRe: Autocomplete issue Pin
Pavel Torgashov16-Mar-16 23:41
memberPavel Torgashov16-Mar-16 23:41 
GeneralRe: Autocomplete issue Pin
EnDee32117-Mar-16 1:00
memberEnDee32117-Mar-16 1:00 
GeneralRe: Autocomplete issue Pin
Pavel Torgashov25-Mar-16 4:59
professionalPavel Torgashov25-Mar-16 4:59 
GeneralRe: Autocomplete issue Pin
EnDee32121-Mar-16 2:01
memberEnDee32121-Mar-16 2:01 
Questionbest highlighting code ever. Pin
MustafaJuma14-Mar-16 20:14
memberMustafaJuma14-Mar-16 20:14 
QuestionOpenBindingFile readonly without locks? Pin
kilroyj19-Feb-16 3:03
memberkilroyj19-Feb-16 3:03 
QuestionXML Folding with namespace prefixes Pin
Robbie197028-Jan-16 22:22
memberRobbie197028-Jan-16 22:22 
AnswerRe: XML Folding with namespace prefixes Pin
Member 1230294716-Feb-16 8:54
memberMember 1230294716-Feb-16 8:54 
QuestionSQL Pattern extension Pin
AlfameisterT5-Jan-16 23:48
memberAlfameisterT5-Jan-16 23:48 
QuestionPaddings set error Pin
vrsingh15-Dec-15 17:15
membervrsingh15-Dec-15 17:15 
QuestionIt is the best highlighting c# code in Internet Pin
dimas197111-Dec-15 9:57
memberdimas197111-Dec-15 9:57 
QuestionCan u add real TAB support (instead of spaces)? Pin
vvx13@26-Nov-15 20:49
membervvx13@26-Nov-15 20:49 
Answeri found a pull request to support tabulated movement of cursor Pin
vvx13@15-Dec-15 9:17
membervvx13@15-Dec-15 9:17 
QuestionAutocompleteSample4 Case Sensitive Pin
Member 1022498915-Nov-15 10:59
memberMember 1022498915-Nov-15 10:59 
QuestionThe TextBox can support Chinese ? Pin
linuxaidtest4-Nov-15 16:32
memberlinuxaidtest4-Nov-15 16:32 
QuestionCan i change width of the Autocomplete? Pin
Member 1092661026-Oct-15 9:33
memberMember 1092661026-Oct-15 9:33 
AnswerRe: Can i change width of the Autocomplete? Pin
Nick_st16-Dec-15 4:55
memberNick_st16-Dec-15 4:55 
GeneralRe: Can i change width of the Autocomplete? Pin
Member 1092661016-Dec-15 6:29
memberMember 1092661016-Dec-15 6:29 
QuestionHint above? Pin
i0022-Oct-15 12:06
professional i0022-Oct-15 12:06 
QuestionFastColoredTextBoxNS.FastColoredTextBox.set_Font(Font value) Pin
nnnnki17-Oct-15 1:54
membernnnnki17-Oct-15 1:54 
BugPrintln("Public Sub ...()"); Pin
Giorgos_xou10-Oct-15 5:26
memberGiorgos_xou10-Oct-15 5:26 
AnswerRe: Println("Public Sub ...()"); Pin
Giorgos_xou15-Oct-15 6:13
memberGiorgos_xou15-Oct-15 6:13 
QuestionMultiline comment example not work good. Pin
xNetDeveloper9-Oct-15 11:04
memberxNetDeveloper9-Oct-15 11:04 
QuestionRegarding the Powerful C# Editor Pin
Member 109798949-Oct-15 10:40
memberMember 109798949-Oct-15 10:40 
QuestionBreakpoint Pin
Member 120322815-Oct-15 15:36
memberMember 120322815-Oct-15 15:36 
QuestionRegarding Clipboard Pin
Member 109798945-Oct-15 5:02
memberMember 109798945-Oct-15 5:02 
GeneralMy vote of 4 Pin
Member 1184020211-Aug-15 9:55
memberMember 1184020211-Aug-15 9:55 
GeneralRe: My vote of 4 Pin
Pavel Torgashov21-Aug-15 10:30
memberPavel Torgashov21-Aug-15 10:30 
GeneralMy vote of 5 Pin
Member 118930007-Aug-15 1:22
memberMember 118930007-Aug-15 1:22 
Questionuseful RegEx for FCTB editing C# Pin
BillWoodruff25-Jul-15 3:12
mvpBillWoodruff25-Jul-15 3:12 
Questiontwo quick questions Pin
BillWoodruff24-Jul-15 4:17
mvpBillWoodruff24-Jul-15 4:17 
QuestionXml Code Folding Pin
Eiredrake20-Jul-15 13:36
memberEiredrake20-Jul-15 13:36 
AnswerRe: Xml Code Folding Pin
Grappachu29-Oct-15 4:13
memberGrappachu29-Oct-15 4:13 
QuestionLanguage File Downloads? Pin
Alde Oma30-Jun-15 9:28
memberAlde Oma30-Jun-15 9:28 
QuestionRe: Export tasks via easyFtp Pin
Member 1180229530-Jun-15 0:20
memberMember 1180229530-Jun-15 0:20 
QuestionSync Scrolling Pin
Member 1121779729-Jun-15 1:27
memberMember 1121779729-Jun-15 1:27 
QuestionMy Vote 5 Pin
Dharmesh .S. Patil26-Jun-15 0:55
professionalDharmesh .S. Patil26-Jun-15 0:55 
BugVB Indent is very unstable Pin
Gabriel Scatolin6-Jun-15 12:00
memberGabriel Scatolin6-Jun-15 12:00 
QuestionAutocomplete fragment text Pin
Member 117318344-Jun-15 5:18
memberMember 117318344-Jun-15 5:18 
QuestionCan there be more than one macro? Pin
vsridhara4-Jun-15 1:29
membervsridhara4-Jun-15 1:29 
QuestionHighlight a row not working Pin
Member 1092661031-May-15 9:57
memberMember 1092661031-May-15 9:57 
QuestionGet the text in the last line visited . Pin
xNetDeveloper12-May-15 1:53
memberxNetDeveloper12-May-15 1:53 
QuestionColoring only the visible range Pin
xNetDeveloper6-May-15 12:13
memberxNetDeveloper6-May-15 12:13 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    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 | Terms of Use | Mobile
Web01 | 2.8.160426.1 | Last Updated 30 Jun 2011
Article Copyright 2011 by Pavel Torgashov
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid