关于Syntax Highlight, (chestnuts (橙子鸟) 进)

Tangheng2002 2003-08-06 12:07:40
我希望知道多一点关于RichTextBox上面Syntax Highlight 的信息,应用于Windows form
e_mail: danpeng1000@sina.com
谢谢

http://expert.csdn.net/Expert/TopicView3.asp?id=1411653
...全文
72 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tangheng2002 2003-08-13
  • 打赏
  • 举报
回复
好,多给你加了点分,有条件的,我还需要详细的注释,同时效率要高
chestnuts 2003-08-13
  • 打赏
  • 举报
回复
发给你了!
有什么问题MSN联系
我的MSN账号:csharpsharper@yahoo.com.cn
可不是雅虎通哦!!!
记住了!!
赫赫~~~~
随时在线
chestnuts 2003-08-11
  • 打赏
  • 举报
回复
给个提示好了~~
大家知道Windows消息吗?
chestnuts 2003-08-11
  • 打赏
  • 举报
回复
我来了!这个分数只有我拿才符合哦~~!!!
史上最简单最Super的解决办法只有我才有哦!
而且不会flicker闪烁哦!
而且跟sharpdeveloper一样的效果哦!!
想要吗??
真地想要吗?
我要一百五十分~~
我很少来的~~来了就多拿分吧~
Tangheng2002 2003-08-07
  • 打赏
  • 举报
回复
up
TheAres 2003-08-06
  • 打赏
  • 举报
回复
静态高亮度显示的代码在后面,
如果要功能更复杂,可以研究一下这个C#的IDE编辑器的代码。

http://www.icsharpcode.net/OpenSource/SD/Default.aspx



using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace TheAres.SqlHighLightText
{
/// <summary>
/// Form4 摘要说明。
/// </summary>
public class Form4 : System.Windows.Forms.Form
{
private System.Windows.Forms.RichTextBox sqlRichTextBox;
private System.Windows.Forms.Button button1;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;

public Form4()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.sqlRichTextBox = new System.Windows.Forms.RichTextBox();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// sqlRichTextBox
//
this.sqlRichTextBox.Location = new System.Drawing.Point(56, 32);
this.sqlRichTextBox.Name = "sqlRichTextBox";
this.sqlRichTextBox.Size = new System.Drawing.Size(304, 208);
this.sqlRichTextBox.TabIndex = 0;
this.sqlRichTextBox.Text = "select * from table1";
//
// button1
//
this.button1.Location = new System.Drawing.Point(408, 64);
this.button1.Name = "button1";
this.button1.TabIndex = 1;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form4
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(528, 294);
this.Controls.Add(this.button1);
this.Controls.Add(this.sqlRichTextBox);
this.Name = "Form4";
this.Text = "Form4";
this.ResumeLayout(false);

}
#endregion

public static void Main()
{
Application.Run( new Form4() );
}

private void HighLightText()
{
string[] keywords = {"select","distinct","from",
"where","order","by","group",
"sum"," is ","null","isnull"};

string[] functions = {"isnull","count","sum"};
string[] strings = {@"'((.|\n)*?)'"};
string[] whiteSpace = {"\t","\n"," "};

this.sqlRichTextBox.SelectAll();
this.sqlRichTextBox.SelectionColor = Color.Black;

this.HighLightText(keywords,Color.Blue);
this.HighLightText(functions,Color.Magenta);
this.HighLightText(strings,Color.Red);
this.HighLightText(whiteSpace, Color.Black);
}

private void button1_Click(object sender, System.EventArgs e)
{
HighLightText();

}


private void HighLightText(string[] wordList, Color color)
{
foreach (string word in wordList)
{
Regex r = new Regex(word,RegexOptions.IgnoreCase);

foreach(Match m in r.Matches( this.sqlRichTextBox.Text ) )
{
this.sqlRichTextBox.Select(m.Index,m.Length);
this.sqlRichTextBox.SelectionColor = color;
}
}
}
}
}
ddy2000 2003-08-06
  • 打赏
  • 举报
回复
学习
Tangheng2002 2003-08-06
  • 打赏
  • 举报
回复
我后来用了for循环替代foreach
3秒
还是太慢
Tangheng2002 2003-08-06
  • 打赏
  • 举报
回复
实际上班门斧,你在另外一个帖子中也回答过我类似的问题,非常感谢你上次的提示
不过实际上我这一次的提问更想得到的是高效的逻辑
我在richtextbox里做Color Syntax的时候,是这样的逻辑
把text按照行分开(Regex.Split(text,"\n"))
|
循环判断每一行是否是注释(比如//)
|
是则取出//前面的字符串(将包括//后面的字符串及其index纪录进一个ArrayList),否则取出整个的字符串
|
然后用正则表达式将取出的字符串分成单个单词与KeyWord字符串数组进行匹配
|
匹配成功则纪录进另一个ArrayList中
|
最后是遍历这两个ArrayList,用RichTextBox的Select来改变颜色

我之所以用两个ArrayList,是因为暴露给外面的KeyColor和CommentColor两个属性,可以在
RunTime下选择Color来改变高亮的颜色,当我改变颜色的时候,前面一些匹配的工作就可以不用作了。
可是我发现,最后的一步和ArrayList相关的动作,却花了将近30秒(text大致有1000行)
这是代码:
HighlightWord[] highlighword = (HighlightWord[])arrInput.ToArray(typeof(HighlightWord));
foreach(HighlightWord obj in highlighword)
{
this.Select(obj.index,obj.length);
}
我希望能找到好的逻辑来解决。
源码链接: https://pan.quark.cn/s/8ddf8a1c92f9 **libcurl用于获取大型文件**libcurl作为一个开源的C语言库,提供了一系列的API来处理与URL相关的任务,涵盖了HTTP、FTP、SMTP等多种网络协议的应用。在执行大型文件的下载操作时,libcurl展现出卓越的性能表现和高度的灵活性,能够高效地管理大文件传输过程,有效预防内存溢出及其他潜在问题。**libcurl的基础操作**libcurl的基础应用包括以下几个环节:1. **初始化**:需要借助`curl_global_init()`函数来启动libcurl的工作环境。2. **建立会话句柄**:通过`curl_easy_init()`函数创建一个会话句柄,该句柄将用于后续所有的操作流程。3. **配置选项**:运用`curl_easy_setopt()`函数来设定多种参数,例如目标URL、超时时间、重试次数以及数据写入的回调函数等。4. **执行请求**:调用`curl_easy_perform()`函数来实施下载操作。5. **释放资源**:使用`curl_easy_cleanup()`函数来释放已经占用的资源。**获取大型文件时的重要设置**1. **数据写入回调函数**:在处理大型文件下载时,通常不希望一次性将整个文件载入内存。可以配置`CURLOPT_WRITEFUNCTION`选项,指定一个回调函数来处理接收到的数据片段,这样libcurl在接收到数据时会调用该函数,使得我们可以按需将数据写入文件或缓冲区。2. **缓冲策略**:可以设定缓冲区的大小(比如,通过`CURLOPT_BUFFERSIZE`),来控制每次接收数据的数量,从而优化内存...
内容概要:本文档整合了《鬼谷子·决篇》与《三略·审权变第三》《差德行第四》三大古代智慧典籍,构建了一套“决策+形势+用人”三位一体的领导力提升体系。通过28天三合实战路径、三维诊断工具、9个实用模板及独特的“身体锚点”仪式,系统解决管理者在决策犹豫、形势误判、人岗错配等方面的痛点。全文涵盖理论溯源、方法论拆解(如三步决策法、审权变四步法、差德行四步法)、历史案例对照(范蠡 vs 项羽)以及跨资源联动建议,形成从认知到实践的完整闭环。; 适合人群:中基层管理者、创业者、职场阶者,尤其是面临决策困境、环境适应困难或团队用人问题的人群;具备一定管理经验或自我提升意识的个体亦可受益。; 使用场景及目标:① 提升重大事项的决策质量,避免反复纠结与事后后悔;② 增强对外部环境变化的敏感度与应对能力,实现灵活调整;③ 科学评估人才德才素质,实现人岗精准匹配,减少用人失误;④ 构建个人化的决策-应变-用人标准化流程(SOP)。; 阅读建议:建议按照28天路径逐步实践,结合自测表定位短板,优先突破薄弱模块;配套工具模板需实际填写使用,配合身体锚点仪式强化行为记忆;可与“诸葛亮决策术”“立将威信术”等单品联动,全面提升领导力体系。

111,131

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧