我想以特殊的方式格式化我的文字。我有一个方法,在TextBox控件中记录文本。
它只是将文本记录到输出中,没什么特别的。但是,我希望它是这样的,所以它以特殊的方式格式化文本。
Info: This is a test. Blah-blahl-blah-blah reaching the end of the line.
Here's the rest of the sentence.
正如您所看到的那样,文本到达行尾,然后向下并在之前的文本下方格式化。 "信息:"只是一个标签,所以我需要帮助制作一个用标签写文本的方法(在这种情况下标签是"信息")。我怎样才能做到这一点?我在制作这样的东西时遇到了麻烦。
在我的控制台应用程序中,我有类似的东西,但我不确定如何在WinForms中执行此操作。编辑:我将其转换为WinForms。
private const byte LabelWidth = 11;
public static string Margin
{
get
{
return new string(' ', Main.LabelWidth);
}
}
private void Write(string label, string text, params object[] args)
{
if (this.InvokeRequired)
{
this.Invoke(this._logDelegate, text, args);
}
else
{
StringBuilder sb = new StringBuilder();
sb.Append(' ', Main.LabelWidth - label.Length - 3);
sb.Append("[");
sb.Append(label);
sb.Append("]");
sb.Append(" ");
label = sb.ToString();
text = string.Format(text, args);
this.LogTextBox.AppendText(label);
bool first = true;
foreach (string s in text.Split('\n'))
{
string[] lines = new string[(int)Math.Ceiling((float)s.Length / (float)(this.LogTextBox.Size.Width - 11))];
for (int i = 0; i < lines.Length; i++)
{
if (i == lines.Length - 1)
{
lines[i] = s.Substring((this.LogTextBox.Size.Width - Main.LabelWidth) * i);
}
else
{
lines[i] = s.Substring((this.LogTextBox.Size.Width - Main.LabelWidth) * i, (this.LogTextBox.Size.Width - Main.LabelWidth));
}
}
foreach (string line in lines)
{
if (!first)
{
this.LogTextBox.AppendText(Main.Margin);
}
if ((line.Length + Main.LabelWidth) < this.LogTextBox.Size.Width)
{
this.LogTextBox.AppendText(line);
}
else if ((line.Length + Main.LabelWidth) == this.LogTextBox.Size.Width)
{
this.LogTextBox.AppendText(line);
}
first = false;
}
}
}
}
**编辑:**我提出了WinForms版本,但是文本没有在行之前对齐,如示例中所示。
答案 0 :(得分:0)
首先:遗憾的是,你不能在TextBox中使用多种颜色,所以请改用RichTextBox。
我还建议将标签(顾名思义)与Label控件分开,但如果您不想这样做,那么您可以重新使用Console应用程序中的大部分代码,而是要将内容写入控制台,您应该将它们添加到RichTextBox中。有关如何执行此操作的详细信息,请参阅this page。