XMLテキストを編集するためのRichTextBoxがあります。RichTextBox内のXMLタグ名に色を付ける方法
が必要です。タグ名を赤または緑の色にします。
それを行う方法はありますか?
6 に答える
このページを使用して、目的の正規表現が何であるかを調べます。これを取得したら、次の方法のようなものを使用して更新できますRichTextBox
public static void HighlightSyntax(RichTextBox richTextBox, Regex yourRegex, Color someColor)
{
richTextBox.BeginUpdate();
int selPos = richTextBox.SelectionStart;
richTextBox.SelectAll();
richTextBox.SelectionColor = normTextColor;
richTextBox.Select(selPos, 0);
// For each match from the regex, highlight the word.
foreach (Match keyWordMatch in yourRegex.Matches(richTextBox.Text))
{
richTextBox.Select(keyWordMatch.Index, keyWordMatch.Length);
richTextBox.SelectionColor = someColor;
richTextBox.Select(selPos, 0);
richTextBox.SelectionColor = normTextColor;
}
richTextBox.EndUpdate();
}
タイマーを採用して、設定した時間後にこれを自動的に更新することもできます。
これが役立つことを願っています。
ノート。大きなテキストファイルの場合、このようなアプローチは遅くなります! この場合、以下の回答の 1 つに記載されているように、Sinctilla.NET を完全な構文ハイライターとして採用します...
たとえば、構文の色付けの可能なアプローチを説明または提案する記事があります。 WinForms アプリケーションで構文の強調表示を実装する方法
最善かつ最も簡単な方法は、Scintilla.NETを使用してそれを処理することだと思います。そうすれば、車輪を再発明するのではなく、自分にとって本当に重要なことに集中できます:)
MSDNは、RichTextBoxからのテキストコンテンツをフォーマットする単純なC#関数を作成しました: LINK
シンタックスハイライトもサポートするWindows用の優れたソースコード編集コンポーネントであるscintillaをチェックしてください。そして、 ScintillaNETと呼ばれる.NETラッパーがあります。
単純な正規表現を使用して、各タグの場所(開始と終了)を見つけ、以下のように色付けします。
richtextbox1.Select(start, end-start);
richtextbox1.SelectionColor = Color.Green;
richtextbox1.Select(start, 0);
小さな構文強調プロジェクトについては、自分で作成してください! 既に投稿されているシンタックス エディターでの強調表示の例がいくつかあります。
https://stackoverflow.com/a/13007641/1033686
https://stackoverflow.com/a/13007710/1033686
より優れた強調表示が必要な大規模なプロジェクトの場合は、Scintilla.NET を使用します (ただし、少し重く、操作が難しい場合があることに注意してください!)
http://scintillanet.codeplex.com/
エンタープライズ プロジェクトの場合は、actipro シンタックス エディターなどの商用製品を使用してください。