1

私はマウスダウンイベントを使用して右クリックで表示されるコンテキストメニューに取り組んでおり、コンテキストメニューのリストの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;
    }

しかし、すべてを選択し、テキストの行が異なる場合 (selectall) のコメントについては、出力は次のとおりです。

ここに画像の説明を入力

しかし、私は次のようにする必要があります:

ここに画像の説明を入力

(強調表示は気にしないでください。テキストの前に // が必要です)。

テキストの差分行の前に // を追加するにはどうすればよいですか? また、コメントを外すには、私のコードで十分ですか? または、そのためのより多くの/より良いコードがありますか?

編集

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

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

sourceに設定する必要がありますrtb.SelectedText

于 2013-05-15T03:43:28.987 に答える