【问题标题】:Change current color in a richTextBox?更改richTextBox 中的当前颜色?
【发布时间】:2016-09-01 23:59:52
【问题描述】:

我想制作一个程序,您可以在其中输入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;
        }
    }
}

但是当我现在输入一些东西时,颜色会改变,但是当你输入一个字符时,它会像这样被选中:

我怎样才能使这项工作在每次我输入内容时都不会选择字符?还是我必须寻找其他方法才能做到这一点?

【问题讨论】:

标签: c# winforms


【解决方案1】:

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

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

使用这个sn-p可以避免上面提到的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;
    }
}

除了这里的其他答案,我还有一个魔术框,它会根据文本改变颜色。

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

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

}

【讨论】:

  • 虽然这行得通,但使用 TextChanged 事件确实没有必要,而且在格式化已经存在的文本时也无济于事..
【解决方案2】:

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

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

它将延续到您输入的所有文本;确保没有换行符(在 RTB 中实际上意味着一个新段落)滑入,因为它会破坏自动结转。这一切都非常像在 Word 中一样。

顺便说一句:不要打电话给RichTextBoxTextbox;是的,它们是相关的,但仍然..

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

选择用于格式化文本部分。

突出显示在此过程中发生,看起来像是在系统设置中设置的。

这是一个示例,您可以开始使用:

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 事件。

【讨论】:

  • 我不知道你在说什么
  • 阅读完整答案;它已更新。我可能确实误解了你的帖子,但它仍然适用..
  • 嘿,非常感谢您的回答,但我不确定您是否理解我的意思。我想像这样使用该程序:i.imgur.com/OdHyfhE.gifv。如果我的英语不是最好的,我很抱歉。我的第一语言不是英语,我还在学习:)
  • 没问题。我添加了一个例子;请注意,这是您需要的全部内容,因此请务必注释掉 TextChanged 事件中的所有代码!
猜你喜欢
  • 2010-11-06
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 2015-08-18
  • 2020-02-12
  • 2012-07-28
相关资源
最近更新 更多