我想创建一个程序,您可以在其中键入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;
}
}
}
但是当我现在输入内容时,颜色会改变,但是当你输入一个字符时,它将被选择如下:
我怎样才能使这个工作,所以每次输入内容时都不会选择char?或者我是否必须搜索另一种方法来执行此操作?
答案 0 :(得分:1)
至于你的代码:你选择长度为1,即最后一个字符,你现在看到它突出显示。这一切都没有必要。如果要将颜色或其他格式设置为文本,请输入:
它将继承您输入的所有文字;确保没有换行符(在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;
更改仅选定文本的颜色。
您可以使用SelectionStart
和SelectionLength
来决定需要选择文本的哪一部分。它纯粹是在研究索引的基础知识。
使用此代码段可以避免在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;
}
}