我正在制作一个C#
应用程序,其中包含一个RichTextBox
,用户可以在其中放入一些C#
代码,并按照Visual Studio的缩进格式进行格式化。< / p>
private void btnEdit_Click(object sender, EventArgs e)
{
//rchCode.Text= formattedCode; //Which I haven't got anywhere so far
}
我查找了相同的问题,this answer建议使用名为NArrange的内容,但我不想使用其他工具,加载项等。
同样this one提供CodeDOM方式,我还没弄清楚如何使用它(如果它在任何方面都有帮助)
我想通过编写一些实际代码来实现。有没有人以前做过或知道怎么做?
答案 0 :(得分:5)
要正确缩进代码,您需要Microsoft.CodeAnalysis.CSharp nuget包和.NET framework 4.6+。示例代码:
public string ArrangeUsingRoslyn(string csCode) {
var tree = CSharpSyntaxTree.ParseText(csCode);
var root = tree.GetRoot().NormalizeWhitespace();
var ret = root.ToFullString();
return ret;
}
一衬垫:
csCode = CSharpSyntaxTree.ParseText(csCode).GetRoot().NormalizeWhitespace().ToFullString();
您也可以使用NArrange对cs文件中的方法进行排序,组织使用,创建区域等。
答案 1 :(得分:2)
所以我通过这种方式得到了解决方案:
它还不完美(因为它总是在第一个代码行之前添加一个或多个新行)。因此,如果任何人都可以改进它或有更好的方法,我会感激任何新的建议
private void btnEdit_Click(object sender, EventArgs e)
{
RichTextBox rchTemp = new RichTextBox();
foreach (string line in rchCode.Lines)
{
rchTemp.AppendText("\r\n" + line.Trim());
}
RichTextBox rchTemp2 = new RichTextBox();
int indentCount = 0;
bool shouldIndent = false;
foreach (string line in rchTemp.Lines)
{
if (shouldIndent)
indentCount++;
if (line.Contains("}"))
indentCount--;
if (indentCount == 0)
{
rchTemp2.AppendText("\r\n" + line);
shouldIndent = line.Contains("{");
continue;
}
string blankSpace = string.Empty;
for (int i = 0; i < indentCount; i++)
{
blankSpace += " ";
}
rchTemp2.AppendText("\r\n" + blankSpace + line);
shouldIndent = line.Contains("{");
}
rchCode.Text = rchTemp2.Text;
}
}