WinForms文本框特殊格式
本文关键字:格式 文本 WinForms | 更新日期: 2023-09-27 18:03:41
我想用一种特殊的方式来格式化我的文本。我有一个方法记录文本框控件中的文本。
它只是将文本记录到输出中,没有什么特别的。但是,我希望它是这样的,所以它以一种特殊的方式格式化文本。
Info: This is a test. Blah-blahl-blah-blah reaching the end of the line.
Here's the rest of the sentence.
如您所见,文本到达行尾,然后向下并在前面的文本下面进行格式化。"Info:"只是一个标签,所以我需要帮助制作一个方法,用标签写文本(在这种情况下,标签是"Info")。我该怎么做呢?我很难创建这样的东西。
在我的控制台应用程序中,我有类似的东西,但我不确定如何在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版本,但是文本没有像在示例中所示的那样在行下对齐。
首先:不幸的是,你不能在一个文本框中使用多种颜色,所以使用RichTextBox代替。
我还建议将标签(正如它的名字所暗示的)分离到一个标签控件,但如果你不想这样做,那么你可以重用大部分的代码从你的控制台应用程序,但不是写出来的东西到控制台,你应该把它们添加到你的RichTextBox。