WinForms TextBox特殊格式

时间:2014-05-15 07:19:19

标签: c# winforms

我想以特殊的方式格式化我的文字。我有一个方法,在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版本,但是文本没有在行之前对齐,如示例中所示。

1 个答案:

答案 0 :(得分:0)

首先:遗憾的是,你不能在TextBox中使用多种颜色,所以请改用RichTextBox。

我还建议将标签(顾名思义)与Label控件分开,但如果您不想这样做,那么您可以重新使用Console应用程序中的大部分代码,而是要将内容写入控制台,您应该将它们添加到RichTextBox中。有关如何执行此操作的详细信息,请参阅this page