多彩文本框 C#

20

我想在文本框中展示两种颜色的文字,例如第一行为红色,第二行为蓝色。如果我使用 name.ForeColor = Color.Red; 所有文字都会变成红色,但我只希望改变一行的颜色。


@Tudor ForeColor 是Windows表单属性。 - animaonline
1
你可以看一下NLog的richtextbox自定义目标源代码。特别是如果你需要用于日志记录:P - Dominik Antal
4个回答

54

使用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;
    }
}

点击这里以获取更多信息。


1
有没有什么方法可以处理文本框? - Wizard
无法使用 wf TextBox 完成此操作,您必须创建自己的 UserControl 或使用 RichTextBox... - animaonline
我正在学习你的代码`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 不在新的表单中。 - Wizard
这不是我的代码,只需将扩展方法复制到新文件中并添加到您的项目中。添加一个RichTextBox控件并使用AppendText方法。 - animaonline
好的,但是我不需要在新窗体中显示 new Form {Controls = {box}}.ShowDialog(); 这个方法,如何在不使用新窗体的情况下调用它? - Wizard
我认为他在谈论这个答案 - Beyondo

18

您需要使用RichTextBox

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

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

1
有没有不用 RichTextBox 的方法?当要迭代的单词太多时,它真的很慢。 - Momoro

1

这是一个与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;
        }

0

首先,您提供的细节和标签不足 - C# 没有一个特定的 UI 框架,它有几个:WPF、Winforms、ASP.NET、Silverlight。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接