比如,我在文本框里输入:
public class Class1
{
    public void Main()
    {
        //代码
    }
}提交按钮之后,我想把转为C#代码形式包括到数据,浏览时如下:
public class Class1
{
    public void Main()
    {
        //代码
    }
}怎么失现啊,还是有什么现成的控件;谢谢各位帮忙!~

解决方案 »

  1.   

    使用richtext,代码着色一、RichTextBox基本设置 
    二、实现语法高亮 
    三、关键字提示 
    四、实现行号 就简单快速得开发文本编辑器TextBox 最为简单,大家用得也多,缺点是无法实现复杂的操作。RichTextBox虽然是则功能比它强大很多。  这里要实现以下功能的编辑器: 1、实现语法高亮; 
    2、关键字提示; 
    3、行号。 显然TextBox 无法完成我们的任务,虽然都派生自TextBoxBase,但就控制力而言RichTextBox比它优秀很多。这里选用RichTextBox尝试开发。 注:以下只讨论简单开发,不考虑复杂的关键字查找机制。 
    一、RichTextBox基本设置 这里先建立一个工程,建立窗体Form1。 
    可以简单添加RichTextBox控件,可以在Form1_Load中建立。代码如下: 
     复制   保存
    this.WindowState = System.Windows.Forms.FormWindowState.Maximized;RichTextBox rich = new RichTextBox();
    rich.Multiline = true;
    rich.Height = this.Height - 100;
    rich.Width = this.Width - 100;
    rich.Left = 40;
    rich.Top = 40;
    rich.WordWrap = true;
    rich.Text = "12345678";
    rich.ScrollBars = RichTextBoxScrollBars.ForcedVertical;
    this.Controls.Add(rich);这样就建立了简单的RichTextBox,宽度和高度都设置了。没有做Form1窗体缩放的处理。 
    二、实现语法高亮 在RichTextBox里实现语法高亮还是非常简单的。可以使用 
     复制   保存
    rich.Select(0, 1);
    rich.SelectionFont = new Font("宋体", 12, (FontStyle.Regular));
    rich.SelectionColor = Color.Blue;意思是,先选择第一个字母,按上面的设置,选择到了数字‘1’,然后设置这个字的字体大小,再设置字的颜色。 如果对关键字进行处理(这里只处理光标向后流动的情况) 
    首先添加输入事件 
     复制   保存
    rich.KeyDown += new KeyEventHandler(rich_KeyDown);   //这一行添加到Form1_Load中void rich_KeyDown(object sender, KeyEventArgs e)
    {
     //throw new Exception("The method or operation is not implemented.");
    }建立关键字 
     复制   保存
    public static List<string> AllClass()
    {
        List<string> list = new List<string>();
        list.Add("function");
        list.Add("return");
        list.Add("class");
        list.Add("new");
        list.Add("extends");
        list.Add("var");
        return list;
    }当KeyDown事件发生时,向前查找 
     复制   保存
    //返回搜索字符
    public static string GetLastWord(string str, int i)
    {
        string x = str;
        Regex reg = new Regex(@"\s+[a-z]+\s*", RegexOptions.RightToLeft);
        x = reg.Match(x).Value;    Regex reg2 = new Regex(@"\s");
        x = reg2.Replace(x, "");
        return s;
    } 复制   保存
    void rich_KeyDown(object sender, KeyEventArgs e)
    {
        RichTextBox rich = (RichTextBox) sender;
        //throw new Exception("The method or operation is not implemented.");
        string s = GetLastWord(rich.Text, rich.SelectionStart);    if (AllClass().IndexOf(s) > -1)
        {
            MySelect(rich, rich.SelectionStart, s, Color.CadetBlue, true);
        }
    } 复制   保存
    //设定颜色
    public static void MySelect(System.Windows.Forms.RichTextBox tb, int i, string s, Color c, bool font)
    {
        tb.Select(i - s.Length, s.Length);
        tb.SelectionColor = c;
        //是否改变字体
        if (font)
            tb.SelectionFont = new Font("宋体", 12, (FontStyle.Bold));
        else
            tb.SelectionFont = new Font("宋体", 12, (FontStyle.Regular));
        //以下是把光标放到原来位置,并把光标后输入的文字重置
        tb.Select(i, 0);
        tb.SelectionFont = new Font("宋体", 12, (FontStyle.Regular));
        tb.SelectionColor = Color.Black;
    }这样就完成了高亮工作。 
    三、关键字提示 实现关键字提示也是在KeyDown中实现,在提示字种搜索GetLastWord返回的文字,如果前半部分匹配。那么就建立ListBox控件。 
     复制   保存
    void tb_KeyDown(object sender, KeyEventArgs e)
    {
        RichTextBox tb = (RichTextBox) sender;
        if (/*条件搜索到匹配字符*/)
        {
            //搜索ListBox是否已经被创建
            Control[] c = tb.Controls.Find("mylb", false);
            if (c.Length > 0)
                ((ListBox) c[0]).Dispose();  //如果被创建则释放        ListBox lb = new ListBox();
            lb.Name = "mylb";
            lb.Items.Add("asdasdasd");
            lb.Items.Add("asdasdasd");
            lb.Items.Add("asdasdasd");
            lb.Items.Add("asdasdasd");
            lb.Items.Add("asdasdasd");
            lb.Items.Add("asdasdasd");
            lb.Items.Add("asdasdasd");
            lb.Show();
            lb.TabIndex = 100;
            lb.Location = tb.GetPositionFromCharIndex(tb.SelectionStart);
            lb.Left += 10;
            tb.Controls.Add(lb);
        }
    }当然,另外一面,如果创建ListBox,而又在RichTextBox 点击了鼠标也去释放。 
     复制   保存
    void rich_MouseClick(object sender, MouseEventArgs e)
    {
        RichTextBox tb = (RichTextBox) sender;
        Control[] c = tb.Controls.Find("mylb", false);
        if (c.Length > 0)
            ((ListBox) c[0]).Dispose();
    }当然还得在Form1_Load里注册事件 
     复制   保存
    rich.MouseClick += new MouseEventHandler(rich_MouseClick);然后设置ListBox 被选择后用被选择的关键字替换前文搜索到的字符。 下面我们来看看实现行号。 
    四、实现行号 这个是RichTextBox 唯一令我遗憾的地方,居然无法实现行号问题。为什么呢?我首先想到的是自己画。用rich.CreateGraphics()来画。但是,由于画的时候发生在窗体被创建时,所以画不成功,而被RichTextBox 本身的绘制给覆盖了。 然后我选择了在里面添加Label控件 
     复制   保存
    Label l = new Label();
    l.Name = "l";
    l.Top = 0;
    l.TextAlign = ContentAlignment.TopRight;
    l.Width = 40;
    l.Text = "1";
    l.Font = new Font("宋体", 12, (FontStyle.Regular));
    l.Height = this.Height;
    l.BackColor = Color.Gray;
    l.BorderStyle = BorderStyle.None;
    rich.Controls.Add(l);rich.SelectionIndent = 40;rich.SelectionIndent = 40;是把光标对齐到左边距40的位置,防止光标被Label覆盖。 实现编号还不是太难。麻烦出在如何让Lable能跟随RichTextBox 的滚动条滚动。不说实现的 细节,我就假设,如果滚动条向上滚,那么Lable的Top属性增加,反之则减少。但是,RichTextBox 居然无法对ScollBar进行监测。 根本每办法知道滚动条滚动了多少位置,甚至都没办法知道滚动条滚动的方向。 尝试去除滚动条,然后之间添加新的滚动条 
     复制   保存
    VScrollBar vs = new VScrollBar();
    //vs.Dock = DockStyle.Right;
    vs.Name = "vs";
    vs.Maximum = 0;
    vs.Minimum = 0;
    vs.MaximumSize = new Size(0, 0);
    vs.Top = 0;
    vs.Left = rich.Parent.Width - 100 - 22;
    vs.Height = rich.Parent.Height - 100 - 1;
    vs.Value = 0;
    vs.Scroll += new ScrollEventHandler(vs_Scroll);rich.Controls.Add(vs);但是非常难于实现同步滚动,位置很难控制。这个就是目前遇到的RichTextBox 的最大局限性了,非常遗憾,无法开发出这个功能。 
      

  2.   

    楼主可以参考SharpDeveloper.会找到你所要的。
    用RichTextBox不是很适合,有些功能会很麻烦实现。
      

  3.   


    我是想做个 <代码管理> 软件,以方便以后工作中需要时或忘记时直接拿来重用; 目前我用的是Editor相关的控件,对需要加颜色的代码直接编辑,然后保存到数据库里.
    如: public void Main(){ 我是将如下保存到库里
    <font color=blue>public void</font> Main(){ .......
    这样有点麻烦,所以就想问各位有什么方便的方法;我也想过用 replace ,但不太实际.
      

  4.   

    是web还是winform?这个网上应该有控件实现的,自己写可以但是比较麻烦。
      

  5.   

    是web, web以后很方便,只要能上网就能看到.我在百度找中,可关键字不知道怎么搜,一直没找到.
    自己写的话,也太多了.
      

  6.   

    codehighlighter或
    js版本的代码高亮组件
    我这有个添加代码高亮的fckeditor
    http://www.xianfen.net/Article26.aspx
      

  7.   

    网上看到过生成sql语句,等类似的工具是个html网页,scrip写的,可以参考一下
      

  8.   

    语法高亮显示,研究一下RTF文本相关的问题我正在写一个语法高亮显示的控件,如果行的话可以切磋一下。
      

  9.   

    ths zxjay !有时间我会详细看一下的.
      

  10.   

    哎,楼主这态度实在让人不敢恭维啊xumw 
     
    等 级:
     发表于:2008-01-02 14:03:226楼 得分:0 
    楼上的基础很强吗? 我相信我的基础不比你差. 
     
    之所以能够变色,第一要做出需要变色的字典,然后就是读出内容,用正则匹配(不怕麻烦也可以用string提供的功能)然后将color的html代码附加在需要变色的关键字上.最后将新的内容替换原来的html代码
    全是基础,一点技术含量没有.真不知道你的基础是不是真的很好
      

  11.   

    说的是代码语法高亮吗?
    是的话参考这篇文章
    http://www.code-studio.net/CSView.aspx?aid=162
    使用 CodeHighlighter 将代码语法高亮
    codehighlighter,CSDN,博客园用的都是这个。