`
布谷鸟20080122
  • 浏览: 9323 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C#窗口应用RICHTEXTBOX语法高亮着色代码

    博客分类:
  • C#
阅读更多
编写Microsoft SQL Server数据库Table自动生成C#代码(C#代码生成器)及其页面代码aspx与aspx.cs过程中,试图实现C#代码的自动语法高亮着色;网上倒是不少可用于网页的javascript或css的资源;用于C# WinForm的不多,关键是不太适用,只好些一个;需要应用 Collections命名空间;需使用哈希表(Hashtable);

> 纯文本方式> 打印

    using System.Collections; 
    using System.Collections.Generic; 
    Hashtable keywords = new Hashtable(); 
    private void KeywordsInitialize() 
    { 
       keywords.Add("using", "1"); 
       keywords.Add("public", "1"); 
       keywords.Add("private", "1"); 
       keywords.Add("namespace", "1"); 
       keywords.Add("class", "1"); 
       keywords.Add("set", "1"); 
       keywords.Add("get", "1"); 
       keywords.Add("void", "1"); 
       keywords.Add("int", "1"); 
       keywords.Add("string", "1"); 
       keywords.Add("float", "1"); 
       keywords.Add("double", "1"); 
       keywords.Add("for", "1"); 
       keywords.Add("foreach", "1"); 
       keywords.Add("in", "1"); 
       keywords.Add("object", "1"); 
       keywords.Add("if", "1"); 
       keywords.Add("else", "1"); 
       keywords.Add("while", "1"); 
       keywords.Add("do", "1"); 
       keywords.Add("partial", "1"); 
       keywords.Add("switch", "1"); 
       keywords.Add("case", "1"); 
       keywords.Add("default", "1"); 
       keywords.Add("continue", "1"); 
       keywords.Add("break", "1"); 
       keywords.Add("return", "1"); 
       keywords.Add("new", "1"); 
       keywords.Add("bool", "1"); 
       keywords.Add("null", "1"); 
       keywords.Add("false", "1"); 
       keywords.Add("true", "1"); 
       keywords.Add("catch", "1"); 
       keywords.Add("finally", "1"); 
       keywords.Add("try", "1"); 
       keywords.Add("enum", "1"); 
       keywords.Add("extern", "1"); 
       keywords.Add("inline", "1"); 
       keywords.Add("char", "1"); 
       keywords.Add("byte", "1"); 
       keywords.Add("const", "1"); 
       keywords.Add("long", "1"); 
       keywords.Add("protected", "1"); 
       keywords.Add("short", "1"); 
       keywords.Add("signed", "1"); 
       keywords.Add("unsigned", "1"); 
       keywords.Add("struct", "1"); 
       keywords.Add("static", "1"); 
       keywords.Add("this", "1"); 
       keywords.Add("throw", "1"); 
       keywords.Add("union", "1"); 
       keywords.Add("virtual", "1"); 
       keywords.Add("abstract", "1"); 
       keywords.Add("event", "1"); 
       keywords.Add("as", "1"); 
       keywords.Add("explicit", "1"); 
       keywords.Add("base", "1"); 
       keywords.Add("operator", "1"); 
       keywords.Add("out", "1"); 
       keywords.Add("params", "1"); 
       keywords.Add("typeof", "1"); 
       keywords.Add("uint", "1"); 
       keywords.Add("ulong", "1"); 
       keywords.Add("checked", "1"); 
       keywords.Add("goto", "1"); 
       keywords.Add("unchecked", "1"); 
       keywords.Add("readonly", "1"); 
       keywords.Add("unsafe", "1"); 
       keywords.Add("implicit", "1"); 
       keywords.Add("ref", "1"); 
       keywords.Add("ushort", "1"); 
       keywords.Add("decimal", "1"); 
       keywords.Add("sbyte", "1"); 
       keywords.Add("interface", "1"); 
       keywords.Add("sealed", "1"); 
       keywords.Add("volatile", "1"); 
       keywords.Add("delegate", "1"); 
       keywords.Add("internal", "1"); 
       keywords.Add("is", "1"); 
       keywords.Add("sizeof", "1"); 
       keywords.Add("lock", "1"); 
       keywords.Add("stackalloc", "1"); 
       keywords.Add("var", "1"); 
       keywords.Add("value", "1"); 
       keywords.Add("yield", "1"); 
    } 
    /// <summary> 
    /// C#语法高亮着色器 
    /// </summary> 
    /// <param name="start">起始行号</param> 
    private void RichHighlight(int start) 
    { 
       //richTextBox1.Text = textBox4.Text; 
       string[] ln = richTextBox1.Text.Split("\n"); 
       int pos = 0; 
       int lnum = 0; 
       foreach (string lv in ln) 
       { 
           if (lnum >= start) 
           { 
               string ts = lv.Replace("(", " ").Replace(")", " "); 
               ts = ts.Replace("[", " ").Replace("]", " "); 
               ts = ts.Replace("{", " ").Replace("}", " "); 
               ts = ts.Replace(".", " ").Replace("=", " ").Replace(";", " "); 
               if (lv.Trim().StartsWith("//")) 
               { 
                   richTextBox1.Select(pos, lv.Length); 
                   richTextBox1.SelectionFont = new Font("宋体", 9, (FontStyle.Regular)); 
                   richTextBox1.SelectionColor = Color.Gray; 
                   pos += lv.Length + 1; 
                   continue; 
               } 
               if (lv.Trim().StartsWith("#")) 
               { 
                   richTextBox1.Select(pos, lv.Length); 
                   richTextBox1.SelectionFont = new Font("宋体", 9, (FontStyle.Regular)); 
                   richTextBox1.SelectionColor = Color.Green; 
                   pos += lv.Length + 1; 
                   continue; 
               } 
               ArrayList marks = new ArrayList(); 
               string smark = ""; 
               string last = ""; 
               bool inmark = false; 
               for (int i = 0; i < ts.Length; i++) 
               { 
                   if (ts.Substring(i, 1) == "\"" && last != "\\") 
                   { 
                       if (inmark) 
                       { 
                           marks.Add(smark + "," + i); 
                           smark = ""; 
                           inmark = false; 
                       } 
                       else 
                       { 
                           smark += i; 
                           inmark = true; 
                       } 
                   } 
                   last = ts.Substring(i, 1); 
               } 
               if (inmark) 
               { 
                   marks.Add(smark + "," + ts.Length); 
               } 
               string[] ta = ts.Split(" "); 
               int x = 0; 
               foreach (string tv in ta) 
               { 
                   if (tv.Length < 2) 
                   { 
                       x += tv.Length + 1; 
                       continue; 
                   } 
                   else 
                   { 
                       bool find = false; 
                       foreach (string px in marks) 
                       { 
                           string[] pa = px.Split(","); 
                           if (x >= Int32.Parse(pa[0]) && x < Int32.Parse(pa[1])) 
                           { 
                               find = true; 
                               break; 
                           } 
                       } 
                       if (!find) 
                       { 
                           if (keywords[tv] != null) 
                           { 
                               richTextBox1.Select(pos + x, tv.Length); 
                               richTextBox1.SelectionFont = new Font("宋体", 9, (FontStyle.Regular)); 
                               richTextBox1.SelectionColor = Color.Blue; 
                           } 
                       } 
                       x += tv.Length + 1; 
                   } 
               } 
               foreach (string px in marks) 
               { 
                   string[] pa = px.Split(","); 
                   richTextBox1.Select(pos + Int32.Parse(pa[0]), Int32.Parse(pa[1]) - Int32.Parse(pa[0]) + 1); 
                   richTextBox1.SelectionFont = new Font("宋体", 9, (FontStyle.Regular)); 
                   richTextBox1.SelectionColor = Color.DarkRed; 
               } 
           } 
           pos += lv.Length + 1; 
           lnum++; 
       } 
       // 设置一下,才能恢复;后续正确! 
       richTextBox1.Select(0, 1); 
       richTextBox1.SelectionFont = new Font("宋体", 9, (FontStyle.Regular)); 
       richTextBox1.SelectionColor = Color.Black; 
    } 
0
0
分享到:
评论

相关推荐

    RichTextBox语法高亮源代码

    本文将深入探讨RichTextBox控件的语法高亮功能及其源代码实现。 首先,理解什么是语法高亮。语法高亮是一种在代码编辑器中提升代码可读性的技术,通过为不同类型的编程元素(如关键字、字符串、注释等)赋予不同的...

    如何最简单在C#中的richTextBox控件中放入图片

    如何最简单在C#中,richTextBox,控件,中放入图片 如何最简单在C#中,richTextBox,控件,中放入图片 如何最简单在C#中,richTextBox,控件,中放入图片 如何最简单在C#中,richTextBox,控件,中放入图片 如何最...

    在RichTextBox中实现关键字高亮显示

    本文将详细讲解如何在C#的WinForms环境中,利用RichTextBox控件实现关键字高亮显示。 首先,我们需要了解`RichTextBox`的基本操作。`RichTextBox`控件提供了丰富的文本格式化功能,包括字体、颜色、样式等设置。在...

    C# 在richtextbox中生成表格

    在C#编程中,`RichTextBox`控件通常用于显示和编辑富文本,它支持RTF(Rich Text Format)格式,允许我们展示复杂的文本样式,包括字体、颜色、大小、对齐方式等。当我们需要在应用程序中生成或显示表格时,`...

    C# 源码 扩展 RichTextBox 控件

    在.NET Framework中,`RichTextBox`控件是一个用于显示和编辑多格式文本的常用组件,广泛应用于各种桌面应用。然而,原生的`RichTextBox`控件功能相对有限,不支持一些高级特性,如插入图片等。为了满足更丰富的功能...

    C# RichTextbox设置行间距

    在C#编程中,`RichTextBox`控件是Windows Forms应用程序中常见的文本编辑组件,用于显示和编辑富文本格式的数据。它提供了丰富的文本格式化功能,如字体样式、颜色、大小以及对齐方式等。然而,`RichTextBox`默认并...

    C#161演示将图片和文字混合显示在RichTextBox控件中 源代码

    `C#161演示将图片和文字混合显示在RichTextBox控件中`的源代码为我们提供了一个很好的学习案例,教我们如何利用RTF格式和Base64编码在`RichTextBox`中实现图文混排,这对于开发具有更丰富用户体验的应用程序非常有用...

    vb语法高亮类(利用RichTextBox控件进行VB语法高亮显示的类)

    这是一个利用RichTextBox控件进行VB语法高亮显示的类,其原作者是progame。 原始代码支持多种语言的处理,本人根据自己的需要进行了修改,只对VB进行处理,增加了许多VB关键字,还增加一个CStringBuilder.cls 类,...

    C# 文本文件与RichTextBox

    同时,`RichTextBox`控件是Windows Forms应用程序中用于显示和编辑富文本内容的重要工具。本文将深入探讨如何使用C#操作文本文件,并结合`RichTextBox`控件进行交互。 首先,让我们了解如何在C#中读取和写入文本...

    VB中的RichText文本框语法高亮显示实例

    在VB(Visual Basic)编程环境中,我们可以利用RichTextBox控件来实现代码的语法高亮显示。这个实例将向你展示如何使代码在 RichTextBox 中变得更为美观和易于阅读,类似于专业代码编辑器的功能。理解并掌握这个技术...

    [C#版本]语法高亮显示分析程序.rar

    【C#版本】语法高亮显示分析程序是一个用于解析、理解和突出显示源代码文本中特定语言语法的软件工具。在编程环境中,语法高亮能够帮助开发者更清晰地识别代码结构,提升阅读和编辑代码的效率。C#版本的实现通常会...

    c# 利用C#及RichTextBox简单实现Word域功能

    C#是微软开发的一种面向对象的编程语言,广泛应用于Windows桌面应用、Web应用以及游戏开发等。RichTextBox是.NET Framework中的一个控件,它提供了富文本编辑能力,支持字体样式、颜色、超链接等。 要实现Word域...

    c# richtextbox 实现动态gif显示

    在C#编程中,`RichTextBox`控件通常用于创建富文本编辑器,它支持诸如字体样式、颜色、超链接等格式化文本。然而,`RichTextBox`默认并不支持显示图像,更不用说动态GIF了。为了在`RichTextBox`中实现动态GIF显示,...

    c#带行号的richtextbox控件

    在实际项目中,创建这样的自定义控件不仅可以满足行号显示的需求,还可以为`RichTextBox`提供其他自定义功能,如代码高亮、搜索替换等。通过封装这些功能,我们的代码会更加模块化,易于维护和扩展。 `WindowsForms...

    NET,C#在RichTextBox控件加入图片(类似QQ)教程

    在.NET框架中,C#是一种常用的编程语言,用于开发各种应用程序。在开发桌面应用时,我们经常使用Windows Forms或WPF来构建用户界面。在这些界面中,`RichTextBox`控件是一个非常实用的组件,它允许用户输入和格式化...

    c# 仿博客园编辑器的插入代码 代码高亮功能

    在C#编程中,开发一个类似...通过以上步骤,我们可以构建一个功能完备且用户友好的C#代码编辑器,实现类似博客园的代码插入和高亮功能。在实际开发过程中,还需要根据具体需求进行定制和优化,以满足各种场景下的使用。

    C#RichTextBox 行号 与同步滚动

    实现这些功能可能需要额外的库,如`SyntaxHighlighter`或自定义解析器来识别代码结构,然后应用相应的样式。对于智能提示,可以创建一个下拉列表或使用`AutoCompleteSource`属性结合数据源来提供自动完成建议。 在...

    用richTextBox1.Find实现查找功能,C#源代码

    在C#编程中,`richtextbox`控件是一个非常常用的文字编辑和显示组件,它支持多种格式化文本,如字体、颜色、样式等。在实际应用中,我们经常需要为用户提供查找(Find)和替换(Replace)的功能,以便他们能快速定位...

    rtbSyntax (类似于RichTextBox支持语法高亮)

    老外写的一个控件 ,比RichTextBox功能多 ,最大的亮点就是:支持语法高亮。

    实现 c# richtextbox 打印功能

    在.NET框架中,C#是一种常用的编程语言,用于开发各种应用程序,包括Windows桌面应用。`RichTextBox`控件是Windows Forms中的一个组件,用于显示和编辑富文本内容,支持多种格式,如字体、颜色、段落等。在某些场景...

Global site tag (gtag.js) - Google Analytics