我想要的是在控制台的右侧打印合理的文本。完全像所有控制台帮助命令一样。
例如复制命令:通过键入copy /?
,结果的一部分将是以下文本(由于Windows语言,此文本为德语):
Quelle Bezeichnet die zu kopierende(n) Datei(en).
/A Weist auf eine ASCII-Textdatei hin.
/B Weist auf eine Binärdatei hin.
/D Zieldatei kann entschlüsselt erstellt werden.
Ziel Bezeichnet das Verzeichnis und/oder Dateinamen der neuen
Datei(en).
/V Überprüft, ob die Dateien richtig geschrieben wurden.
/N Verwendet den Kurznamen (falls vorhanden), beim Kopieren
einer Datei mit einem Nicht-8Punkt3-Namen.
/Y Unterdrückt die Bestätigungsaufforderung beim Überschreiben
vorhandener Zieldateien.
/-Y Fordert beim Überschreiben vorhandener Zieldateien zum
Bestätigen auf.
在这种情况下,"右栏中的每个文字"超出界限的将在列的开头继续,例如:Ziel
我尝试过以下操作,但没有任何结果返回所需的结果:
Console.WriteLine("{0,10}", "/s The path from the source file (.ini file)");
Console.Write("{0,2}{1,20}", "/d", "The path where the destination file will be converted and copied (.xml file)");
Console.WriteLine("{0}\t\t{1}", "/s=d", "The path from the source file. The destination file will be automatically converted and copied in the same path with the source file.".PadLeft(100));
Console.WriteLine("{0,-10}{1,10}{2,-30}",
"/s The path from the source file (.ini file)",
"/d The path where the destination file will be converted and copied (.xml file)",
"/s=d The path from the source file. The destination file will be automatically converted and copied in the same path with the source file.");
答案 0 :(得分:0)
您可以在打印功能中使用\ t,这是一个TAB,可以在1到4个空格之间
Console.WriteLine("Quelle\t\tBezeignet....");
Console.WriteLine("/A\t\tWeist...");
生成您想要的输出。
我会另外回答:
使用此方法,您可以阻止在控制台上的任何位置打印:
static int PrintBlock(int offset, int y, int maxLineLength, string text)
{
//get the words
var parts = text.Split(new char[] { ' ' });
int i=0;
var sb = new StringBuilder();
for (; i < parts.Length; i++)
{
if (sb.Length + parts[i].Length < maxLineLength)
{
sb.Append(parts[i]);
sb.Append(" ");
}
else
{
//this is a line
Console.SetCursorPosition(offset, y);
Console.Write(sb.ToString().Trim());
sb.Clear();
i--;
y++;
}
}
//print the last line
Console.SetCursorPosition(offset, y);
Console.Write(sb.ToString().Trim());
y++;
return y;
}
你这样使用它:
var text = "This is a text that exceeds the width of the console and must be displayed in a block for displaying help to a user";
var newOffset = PrintBlock(10, 2, 20, text);
newOffset是开始下一行的y位置。
答案 1 :(得分:0)
最简单的方法是使用逐字字符串运算符@
,如下所示:
Console.WriteLine(
@"Quelle Bezeichnet die zu kopierende(n) Datei(en).
/A Weist auf eine ASCII-Textdatei hin.
/B Weist auf eine Binärdatei hin.
/D Zieldatei kann entschlüsselt erstellt werden.
Ziel Bezeichnet das Verzeichnis und/oder Dateinamen der neuen
Datei(en).
/V Überprüft, ob die Dateien richtig geschrieben wurden.
/N Verwendet den Kurznamen (falls vorhanden), beim Kopieren
einer Datei mit einem Nicht-8Punkt3-Namen.
/Y Unterdrückt die Bestätigungsaufforderung beim Überschreiben
vorhandener Zieldateien.
/-Y Fordert beim Überschreiben vorhandener Zieldateien zum
Bestätigen auf."
);
请注意,当您输入此内容时,不要像使用普通程序代码那样缩进字符串(否则用于缩进的空格实际上将构成字符串的一部分)。
或者,只需使用字符串连接:
Console.WriteLine
(
"Quelle Bezeichnet die zu kopierende(n) Datei(en).\n"+
" /A Weist auf eine ASCII-Textdatei hin.\n" +
" /B Weist auf eine Binärdatei hin.\n" +
" /D Zieldatei kann entschlüsselt erstellt werden.\n" +
" Ziel Bezeichnet das Verzeichnis und/oder Dateinamen der neuen\n" +
" Datei(en).\n" +
" /V Überprüft, ob die Dateien richtig geschrieben wurden.\n" +
" /N Verwendet den Kurznamen (falls vorhanden), beim Kopieren\n" +
" einer Datei mit einem Nicht-8Punkt3-Namen.\n" +
" /Y Unterdrückt die Bestätigungsaufforderung beim Überschreiben\n" +
" vorhandener Zieldateien.\n" +
" /-Y Fordert beim Überschreiben vorhandener Zieldateien zum\n" +
" Bestätigen auf."
);
只需添加空格即可让它看起来像你想要的那样。如果字符串是常量,则不需要使用字符串格式说明符。
答案 2 :(得分:0)
好吧,作为“快速和脏”的写字符串留下缩进的方法,你可以做一些简单的计算,并写入控制你的字符串“逐个部分”。
示例代码:
private static void WriteLineIndented(string line, int leftMargin, int width)
{
if (string.IsNullOrEmpty(line))
return;
for(int i = 0; i < leftMargin; i++)
Console.Write(" ");
if (line.Length <= width - leftMargin)
{
Console.WriteLine(line);
return;
}
else
{
int position = Math.Min(width - leftMargin, line.Length - 1);
while (position > 0 && line[position] != ' ')
position--;
Console.WriteLine(line.Substring(0, position));
WriteLineIndented(line.Substring(position + 1, line.Length - position - 1), leftMargin, width);
}
}
用法:
string s = "The path from the source file. The destination file will be automatically converted and copied in the same path with the source file.";
WriteLineIndented(s, 10, 80);
结果:
The path from the source file. The destination file will be automatically converted and copied in the same path with the source file.
这种方法可以根据您的情况轻松修改 - 只需编写您需要的所有内容,而不仅仅是第一行中的空格。