更改richTextBox中的当前颜色?

时间:2016-05-06 19:53:15

标签: c# winforms

我想创建一个程序,您可以在其中键入richTextBox然后更改颜色。

所以我试过了。

private void redFontColor_Click_1(object sender, EventArgs e)
{
   richTxtBox.FrontColor = Color.Red;
}

但是当我点击redFontColor按钮时,richTextbox中的所有文本都变为红色。所以我试着单独改变每个角色的颜色。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    Color currentColor = Color.Black;

    private void redFontColor_Click_1(object sender, EventArgs e)
    {
        currentColor = Color.Red;
    }

    private void richTxtBox_TextChanged(object sender, EventArgs e)
    {
        if (textBox.SelectionStart != 0)
        {
            richTextBox.Select(textBox.SelectionStart - 1, 1);
            richTextBox.SelectionColor = currentColor;
        }
    }
}

但是当我现在输入内容时,颜色会改变,但是当你输入一个字符时,它将被选择如下:

enter image description here

我怎样才能使这个工作,所以每次输入内容时都不会选择char?或者我是否必须搜索另一种方法来执行此操作?

2 个答案:

答案 0 :(得分:1)

至于你的代码:你选择长度为1,即最后一个字符,你现在看到它突出显示。这一切都没有必要。如果要将颜色或其他格式设置为文本,请输入:

  • 将SelectionStart设置为输入文本的点,例如Text
  • 的结尾
  • 将SelectionLength设置为0
  • 设置所需的格式。

它将继承您输入的所有文字;确保没有换行符(在RTB中真正意味着一个新的段落)滑入,因为它会打破自动转移。这一切都与Word中的效果非常相似。

顺便说一句:不要拨打RichTextBox一个Textbox;是的,它们是相关但仍然......

另外:我们需要了解突出显示选择之间的区别!

选择是指格式化文字部分。

突出显示一路发生,看起来设置为查看系统设置。

以下是您需要开始使用的所有示例:

private void panel1_MouseClick(object sender, MouseEventArgs e)
{
    if ( richTextBox1.SelectionLength == 0)
         richTextBox1.SelectionStart = richTextBox1.Text.Length;

    Color c = ((Bitmap)panel1.BackgroundImage).GetPixel(e.X, e.Y);
    if (e.Button.HasFlag(MouseButtons.Left))
    { 
        richTextBox1.SelectionColor = c;
    }
    else
    { 
        richTextBox1.SelectionBackColor = c;
    }
}

选择一个漂亮的调色板,并在Panel.BackgroundImage;代码中显示MouseClick事件。完成。

您可以继续输入,当您左键单击颜色时,文本颜色将开始以颜色显示。当您右键单击它时,背景颜色将会改变。如果有选择,它将改变颜色。

对于完整格式rtb,您需要添加其他内容,如字体样式大小等。

注意:无需为此TextChanged事件编码。

答案 1 :(得分:1)

基本上richTxtBox.FrontColor = Color.Red;会将所有文字的颜色更改为Red,但您需要更改所选文字的颜色,为此需要使用richTextBox1.SelectionColor = Color.Red;更改仅选定文本的颜色。

您可以使用SelectionStartSelectionLength来决定需要选择文本的哪一部分。它纯粹是在研究索引的基础知识。

使用此代码段可以避免在richTextBox1_TextChanged中选择输入文字的上述问题

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
    if (richTextBox1.SelectionStart != 0)
    {
        int length = richTextBox1.Text.Length;
        richTextBox1.Select(richTextBox1.SelectionStart - 1, 1);
        richTextBox1.SelectionColor = Color.Red ;
        richTextBox1.SelectionStart = length;
    }
}

除了其他答案,我还有一个魔术盒,它会根据文字改变颜色。

enter image description here

这可以通过使用以下代码来实现:

private void button1_Click(object sender, EventArgs e)
{
    int selectionStart = 0;
    foreach (var item in richTextBox1.Text.Split(' '))
    {
        Color rgb = Color.FromName(item);
        richTextBox1.SelectionStart = selectionStart;
        richTextBox1.SelectionLength = item.Length;
        richTextBox1.SelectionColor = rgb;
        selectionStart += item.Length + 1;
    }

}