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版本,但是文本没有像在示例中所示的那样在行下对齐。

WinForms文本框特殊格式

首先:不幸的是,你不能在一个文本框中使用多种颜色,所以使用RichTextBox代替。

我还建议将标签(正如它的名字所暗示的)分离到一个标签控件,但如果你不想这样做,那么你可以重用大部分的代码从你的控制台应用程序,但不是写出来的东西到控制台,你应该把它们添加到你的RichTextBox。