RichTextBox的使用
打开vs编辑器的c#windows应用程序,把相应的控件拖到界面上,一个简单的富文本编辑器,大概就是这样
然后双击Bold按钮,编辑事件处理程序,代码如下
private void button1_Click(object sender, EventArgs e)
{
Font oldFont;
oldFont = this.richTextBox1.SelectionFont;
if (oldFont.Bold)
this.richTextBox1.SelectionFont = new Font(oldFont, oldFont.Style & ~FontStyle.Bold);
else
this.richTextBox1.SelectionFont = new Font(oldFont, oldFont.Style | FontStyle.Bold);
this.richTextBox1.Focus();
}
Font类是定义文本格式,这里定义一个变量oldFont用于存储当前选中的文本的文本格式。
Font类中有一个Bold属性,返回一个布尔值,用于判断该文本格式是否是加粗,类似的还有Italic属性,Underline属性,Strikeout属性,分别用于判断是否为倾斜体,是否为下划线,是否有横线贯穿。
如果返回true表明是加粗,则将文本中的加粗变为正常,其他其他属性不变;如果返回false表明未加粗,则将文本加粗。
在Font之外有一个枚举类型FontStyle,用【Flags】特性修饰的。System.FlagsAttribute是一个继承于Attribute的类,放在枚举前面可以将枚举作为一组位域处理,说白了就是可以把枚举中的数值看成一组二进制编码用与或非取反异或等等来处理。
在定义枚举类型前面加上FlagsAttribute,或者简写为【Flags】去掉后面的“Attribute”。FontStyle中有5个常量,Regular = 0,Bold = 1,Italic = 2,Underline = 4,Strikeout = 8,分别转换成二进制代码后为0000,0001,0010,0100,1000。Style也是Font类中的一个属性,在Font中的定义为
public FontStyle Style { get; }
返回的是当前文本格式中的信息样式,即通过二进制位的每一位是0还是1来判断是否满足上述五点中的一点或几点;
上述代码中~符号是按位取反运算符,将FontStyle.Bold取反后为1110,再和被选中文本的Style属性与运算,四个位上依次进行与运算,0和任何数与之后的结果都是0,而1和其他数与之后的结果则是由另一个数来决定,可以看出,末位的0与运算之后一定为0,前面3个则是由Style来决定。所以此次运算的结果宏观上看就是将被选中的文本的样式信息中决定是否为加粗的二进制位变为0,也就是去掉了加粗
然后以此变量和原有的文本信息样式oldFont为参数创建一个Font类的新实例,并赋值给选中的文本,最后达到的结果就是如果被选中的文本是加粗,就去掉,后面的else同理,如果不是加粗,就将文本加粗。
然后依次双击后面三个按钮,编辑事件处理程序
private void button2_Click(object sender, EventArgs e)
{
Font oldFont;
oldFont = this.richTextBox1.SelectionFont;
if (oldFont.Underline)
this.richTextBox1.SelectionFont = new Font(oldFont, oldFont.Style & ~FontStyle.Underline);
else
this.richTextBox1.SelectionFont = new Font(oldFont, oldFont.Style | FontStyle.Underline);
this.richTextBox1.Focus();
}
private void button3_Click(object sender, EventArgs e)
{
Font oldFont;
oldFont = this.richTextBox1.SelectionFont;
if (oldFont.Italic )
this.richTextBox1.SelectionFont = new Font(oldFont, oldFont.Style & ~FontStyle.Italic );
else
this.richTextBox1.SelectionFont = new Font(oldFont, oldFont.Style | FontStyle.Italic );
this.richTextBox1.Focus();
}
private void button4_Click(object sender, EventArgs e)
{
if (this.richTextBox1.SelectionAlignment == HorizontalAlignment.Center)
this.richTextBox1.SelectionAlignment = HorizontalAlignment.Left;
else
this.richTextBox1.SelectionAlignment = HorizontalAlignment.Center;