【问题标题】:Multi-color TextBox C#多色文本框 C#
【发布时间】:2012-05-14 16:51:59
【问题描述】:

我想在文本框中以 2 种颜色显示文本,例如 1 行红 2 蓝,如果我使用 name.ForeColor = Color.Red; 所有文本都会改变颜色,但我希望它只会改变 1 行颜色。

【问题讨论】:

  • @Tudor ForeColor 是一个窗体属性
  • 你可以看看 NLog 的 Richtextbox 自定义目标源。特别是如果你需要这个来记录:P

标签: c# winforms textbox


【解决方案1】:

为此使用 RichTextBox,这是 Nathan Baulch 的扩展方法

public static class RichTextBoxExtensions
{
    public static void AppendText(this RichTextBox box, string text, Color color)
    {
        box.SelectionStart = box.TextLength;
        box.SelectionLength = 0;

        box.SelectionColor = color;
        box.AppendText(text);
        box.SelectionColor = box.ForeColor;
    }
}

阅读更多here

【讨论】:

  • 知道如何处理文本框吗?
  • 没有办法用 wf TextBox 做到这一点,您必须创建自己的 UserControl 或使用 RichTextBox...
  • 我现在正在研究您的代码var userid = "USER0001"; var message = "Access denied"; var box = new RichTextBox { Dock = DockStyle.Fill, Font = new Font("Courier New", 10) }; box.AppendText("[" + DateTime.Now.ToShortTimeString() + "]", Color.Red); box.AppendText(" "); box.AppendText(userid, Color.Green); box.AppendText(": "); box.AppendText(message, Color.Blue); box.AppendText(Environment.NewLine); new Form {Controls = {box}}.ShowDialog();,但不明白如何做到 RichTextBox 不会采用新形式?
  • 这不是我的代码,只需将扩展方法粘贴到新文件中即可将其添加到您的项目中。添加 RichTextBox 控件并使用 AppendText 方法。
  • 好的,但是`new Form {Controls = {box}}.ShowDialog();'我不需要以新形式显示,如何在不使用新形式的情况下调用此方法
【解决方案2】:

您需要使用RichTextBox

然后您可以通过选择文本并更改选择颜色或字体来更改文本颜色。

richTextBox1.SelectionFont = new Font("Verdana", 12, FontStyle.Bold);
richTextBox1.SelectionColor = Color.Red;

【讨论】:

  • 没有 RichTextBox 有什么办法吗?字数太多要迭代的时候真的很慢。
【解决方案3】:

这是一个使用 Fontdialog 和 Colordialog 的示例。

void TextfarbeToolStripMenuItemClick(object sender, EventArgs e)
        {
            colorDialog1.ShowDialog();
            richTextBox1.ForeColor = colorDialog1.Color;
            listBox1.ForeColor = colorDialog1.Color;
        }

        void FontsToolStripMenuItemClick(object sender, EventArgs e)
        {
            fontDialog1.ShowDialog();
            richTextBox1.Font = fontDialog1.Font;
            listBox1.Font = fontDialog1.Font;
        }

        void HintergrundfarbeToolStripMenuItemClick(object sender, EventArgs e)
        {
            colorDialog1.ShowDialog();
            richTextBox1.BackColor = colorDialog1.Color;
            listBox1.BackColor = colorDialog1.Color;
        }

【讨论】:

    【解决方案4】:

    首先,你提供的细节+标签是不够的——C#没有一个特定的UI框架,它有几个:WPF、Winforms、ASP.NET、Silverlight。

    其次,您不能使用上述任何一个常规文本框控件来执行此操作。 您将需要找到/创建具有不同行为的自定义 UI 控件或使用更高级的控件,例如富文本框。

    【讨论】:

      猜你喜欢
      • 2018-04-25
      • 2010-10-16
      • 2011-09-27
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 2015-01-01
      • 1970-01-01
      相关资源
      最近更新 更多