1

我正在开发一个使用 mousedown 事件在右键单击时显示的上下文菜单,我的上下文菜单列表中有 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;
    }

但是当我全选并且有不同的文本行(全选)时,为了发表评论,输出是:

在此处输入图像描述

但我应该是这样的:

在此处输入图像描述

(不要介意突出显示只是我想要文本之前的 //)。

如何在不同的文本行之前添加 //?另外取消注释我的代码是否足够?或者有更多/更好的代码吗?

编辑

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

4 回答 4

4

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

您需要为新行字符解析选定的文本,然后在每行的开头添加一个“//”。

此处描述了字符串生成器,它在 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();
}
于 2013-05-15T03:35:10.147 回答
1

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

rtb.SelectedText = "//" + rtb.SelectedText.Replace(System.Environment.NewLine, System.Environment.NewLine + "//")
于 2013-05-15T03:37:33.980 回答
0

您需要按行将其拆分并在每个开头添加“//”。现在,您只需添加“//”作为由连接的每一行组成的单个字符串的开头(因此单个“//”)。

于 2013-05-15T03:36:20.443 回答
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

您需要设置sourcertb.SelectedText

于 2013-05-15T03:43:28.987 回答