评论和取消注释代码

时间:2013-05-15 03:28:56

标签: c# visual-studio-2010

我正在使用mousedown事件在rightclick上显示的contextmenu以及我的上下文菜单列表中的2是注释并取消注释此代码:

private void CommentMenuItemClick(object sender, EventArgs e)
    {
        rtb.SelectedText = "//" + rtb.SelectedText;
        lb.Hide();
    }

    private void UnCommentMenuItemClick(object sender, EventArgs e)
    {
        rtb.SelectedText = rtb.SelectedText.Replace("//", "");
        lb.Hide();
        rtb.SelectionColor = Color.Black;
    }

但是当我选择all和theres diff文本行(selectall)时,为了评论,输出是:

enter image description here

但我应该像:

enter image description here

我该怎么做?在文本差异行之前添加//?有什么建议吗? 还是为了取消注释是我的代码足够吗?或者更好的代码呢? 请帮助多多!

---编辑

void Parse()
    {
        String inputLanguage = "\n";

        // Foreach line in input,
        // identify key words and format them when adding to the rich text box.
        Regex r = new Regex("\\n");
        String[] lines = r.Split(inputLanguage);
        foreach (string l in lines)
        {
            ParseLine(l);
        }
    }

4 个答案:

答案 0 :(得分:4)

您的问题是您只是在文本的开头添加'//'。

您需要为新行char解析所选文本,然后在每行的开头添加“//”。

字符串构建器描述为here,它位于System.Text

类似的东西:

private void CommentMenuItemClick(object sender, EventArgs e)
{
    StringBuilder sw = new StringBuilder();

    string line;
    StringReader rdr = new StringReader(rtb.SelectedText);
    line = rdr.ReadLine();
    while(line != null)
    {
            sw.AppendLine(String.IsNullOrWhiteSpace(line) ? "//" : "" + line);
            line= rdr.ReadLine();
    }
    rtb.SelectedText = sw.ToString();
    lb.Hide();
}

答案 1 :(得分:1)

您需要做的是用“//”替换换行符 所以试试这个

rtb.SelectedText = "//" + rtb.SelectedText.Replace(System.Environment.NewLine, System.Environment.NewLine + "//")

答案 2 :(得分:0)

你需要按行分解并添加" //"到每个人的开头。现在你只是添加" //"是由连接的每一行组成的单个字符串的开头(因此单个" //")。

答案 3 :(得分:0)

首先拆分每一行。然后将//添加到每行的开头。

string[] lines = selected.Split('/n', '/r');
foreach (string l in lines)
{
    ParseLine(l);
} 

添加到这些行并附加它们。附加的字符串将替换为所选文本。

修改

注释:

using System;

public class Test
{
    public static void Main()
    {
        string source = "comment me" + Environment.NewLine + "line two.";
        string[] lines = source.Split('\r', '\n');
        foreach (string line in lines)
        {
            Console.WriteLine("//" + line);
        }
    }
}

输出:

// comment me
// line two.

在线代码段:http://ideone.com/sGJNzr

取消注释:

using System;

public class Test
{
    public static void Main()
    {
        string source = "//uncomment me" + Environment.NewLine + "//line two.";
        string[] lines = source.Split('\r', '\n');
        foreach (string line in lines)
        {
            Console.WriteLine(line.Replace("//", ""));
        }
    }
}

输出:

uncomment me
line two.

在线代码段:http://ideone.com/roY0AK

您需要将source设置为rtb.SelectedText