I don't see any conceptual barrier to your getting this done: here's a simple demonstration that requires a RichTextBox, and a Button on a Form.
Wire-up the RichTextBox's SelectionChanged EventHandler as shown here, and the Button's Click EventHandler as shown here:
private int selStart;
private int selEnd;
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
selStart = richTextBox1.SelectionStart;
selEnd = selStart + richTextBox1.SelectionLength;
}
private void button1_Click(object sender, EventArgs e)
{
richTextBox1.SelectionColor = Color.Red;
richTextBox1.Focus();
richTextBox1.SelectionStart = selStart;
richTextBox1.SelectionLength = 0;
}
You can do whatever you like after you have set Color, Font, or whatever, to the current Selection.
When you are done you can do nothing which would leave the current selection as-is; or, as shown here, set the insert caret at the start and have no selection; or, use the other variable 'selEnd to set the insertion caret at the end of the selection, and so on.