我正在使用C#編寫自己的基本語法高亮編輯器。我已經完成了關鍵字,函數等的自動着色。我不需要任何其他花哨的東西,如自動代碼縮進。RichTextEditor在C#中的代碼縮進
但是,我希望有一個代碼縮小/最大化按鈕。沒有什麼花哨。我只是希望它能夠在任何開頭括號之前自動設置換行符,並且在換行符後面或者更改SelectionIndent Property之後自動設置換行符。
因此,像這樣:
test { test { test } test }
變爲:
test
{
test
{
test
}
}
,當然還有縮小按鈕應該做的正好相反,把一切在1號線。
我已經嘗試使用Regex.Replace Method。我沒有完全理解它,但考慮到這種方法,如果開始和結束括號混淆起來,就會引起問題。無論如何,這是我,直到我放棄了,決定要問你們一些幫助:
string tabs = "";
private void btnMax_Click(object sender, EventArgs e)
{
var count = codeRichTextBox.Text.Count(x => x == '{');
for(int i=1; i<= count; i++)
{
// The idea was to add \t to tabs here on each iteration
}
string pattern = "{";
string replacement = "\n{\n\t";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(codeRichTextBox.Text, replacement);
codeRichTextBox.Text = result;
}
顯然,該解決方案是錯誤的做法,而不是去上班。那麼我該怎麼做呢?
編輯:雖然它會很好,但它不必考慮字符串的一部分已經有代碼縮進。最大化按鈕只需要處理一行中的字符串。
無論您使用什麼方法,請確保您的代碼足夠聰明,以忽略字符串和註釋中出現的任何括號。 – RJM
@RJM通常我會同意你的看法,但由於這將是Minecraft命令塊的編輯器,所以我絕對確信永遠不會出現這種情況。感謝您的提示 – icecub