基于 [博客园-《叩响C#之门》-关于RichTextBox修改字体大小的研究]
感谢作者:李雨来 感谢 寒飞雨 的分享。
看了《关于RichTextBox修改字体大小的研究》一文后,根据文中的参考小小的拓展了下功能,
把功能弄成改变字体大小,粗体、斜体、下划、删除线,字符上色。
选中的字符同时具备 粗体、斜体、下划、删除线就要用到 FontStyle。
有两种方式:
FontStyle style = FontStyle.Bold;
style |= FontStyle.Underline;
style |= FontStyle.Italic;
style |= FontStyle.Strikeout;
或
FontStyle style = (FontStyle)(FontStyle.Bold |FontStyle.Italic |FontStyle.Underline | FontStyle.Strikeout);
public static class SetFontSytyle
{
#region =★=*=*=★= 设置选中字体样式 =★=*=*=★=
//1.粗体 2.斜体 3.下划线 4.删除线
//5.粗体+斜体 6.粗体+下划线 7.粗体+删除线 8.斜体+下划线 9.斜体+删除线 10.下划线+删除线
//11.斜体+下划线+删除线 12.粗体+下划线+删除线 13.粗体+斜体+删除线 14.粗体+斜体+下划线
//15.粗、斜、下、删
/// 设置选中字体样式(1)
/// 此方法有五种形式:
/// 1.)只改变字体大小 2.)在1的基本上,粗、斜体、下划线、删除线样式
/// 3.)在2的基本上,高亮模式(字体上色)
/// 4.)可同时设置〖FontStyle〗多样化 5.)在4的基本上设置字体颜色
/// RichTextBox 控件
/// 设置选中字体大小,设置时应为(0.5)的倍数。
public static void changeFontSize(RichTextBox rich, float fontsize)
{
int selStart = rich.SelectionStart;
int selLen = rich.SelectionLength;
int selEnd = selStart + selLen;
changeHelp(rich, selStart, selEnd, fontsize);
rich.Select(selStart, selLen);
}
/// 设置选中字体样式(2)
/// 此方法有五种形式:
/// 1.)只改变字体大小 2.)在1的基本上,粗、斜体、下划线、删除线样式
/// 3.)在2的基本上,高亮模式(字体上色)
/// 4.)可同时设置〖FontStyle〗多样化 5.)在4的基本上设置字体颜色
/// RichTextBox 控件
/// 设置选中字体大小,设置时应为(0.5)的倍数。
/// 字体样式:普通,粗体,斜体,删除线,下划线 样式
public static void changeFontSize(RichTextBox rich, float fontsize, FontStyle style)
{
int selStart = rich.SelectionStart;
int selLen = rich.SelectionLength;
int selEnd = selStart + selLen;
changeHelp(rich, selStart, selEnd, fontsize, style);
rich.Select(selStart, selLen);
}
/// 设置选中字体样式(3)
/// 此方法有五种形式:
/// 1.)只改变字体大小 2.)在1的基本上,粗、斜体、下划线、删除线样式
/// 3.)在2的基本上,高亮模式(字体上色)
/// 4.)可同时设置〖FontStyle〗多样化 5.)在4的基本上设置字体颜色
/// RichTextBox 控件
/// 设置选中字体大小,设置时应为(0.5)的倍数。
/// 字体样式:普通,粗体,斜体,删除线,下划线 样式
/// 设置选中字体颜色
public static void changeFontSize(RichTextBox rich, float fontsize, FontStyle style, Color color)
{
int selStart = rich.SelectionStart;
int selLen = rich.SelectionLength;
int selEnd = selStart + selLen;
changeHelp(rich, selStart, selEnd, fontsize, style, color);
rich.Select(selStart, selLen);
}
/// 设置选中字体样式(4)
/// 此方法有五种形式:
/// 1.)只改变字体大小 2.)在1的基本上,粗、斜体、下划线、删除线样式
/// 3.)在2的基本上,高亮模式(字体上色)
/// 4.)可同时设置〖FontStyle〗多样化 5.)在4的基本上设置字体颜色
/// RichTextBox 控件
/// 设置选中字体大小,设置时应为(0.5)的倍数。
/// Int值 十六种字体样式 以下数字代表:
/// 1.粗体 2.斜体 3.下划线 4.删除线
/// 5.粗体+斜体 6.粗体+下划线 7.粗体+删除线 8.斜体+下划线 9.斜体+删除线 10.下划线+删除线
/// 11.斜体+下划线+删除线 12.粗体+下划线+删除线 13.粗体+斜体+删除线 14.粗体+斜体+下划线
/// 15.粗、斜、下、删
public static void changeFontSize(RichTextBox rich, float fontsize, int cont)
{
int selStart = rich.SelectionStart;
int selLen = rich.SelectionLength;
int selEnd = selStart + selLen;
changeHelp(rich, selStart, selEnd, fontsize, FontStyleBius(cont));
rich.Select(selStart, selLen);
}
/// 设置选中字体样式(5)
/// 此方法有五种形式:
/// 1.)只改变字体大小 2.)在1的基本上,粗、斜体、下划线、删除线样式
/// 3.)在2的基本上,高亮模式(字体上色)
/// 4.)可同时设置〖FontStyle〗多样化 5.)在4的基本上设置字体颜色
/// RichTextBox 控件
/// 设置选中字体大小,设置时应为(0.5)的倍数。
/// Int值 十六种字体样式 以下数字代表:
/// 1.粗体 2.斜体 3.下划线 4.删除线
/// 5.粗体+斜体 6.粗体+下划线 7.粗体+删除线 8.斜体+下划线 9.斜体+删除线 10.下划线+删除线
/// 11.斜体+下划线+删除线 12.粗体+下划线+删除线 13.粗体+斜体+删除线 14.粗体+斜体+下划线
/// 15.粗、斜、下、删
/// 设置选中字体颜色
public static void changeFontSize(RichTextBox rich, float fontsize, int cont, Color color)
{
int selStart = rich.SelectionStart;
int selLen = rich.SelectionLength;
int selEnd = selStart + selLen;
changeHelp(rich, selStart, selEnd, fontsize, FontStyleBius(cont), color);
rich.Select(selStart, selLen);
}
#endregion
#region =★=*=*=★= 设置字体样式〖调用方法〗 =★=*=*=★=
/// 设置字体样式(一)
///
/// RichTextBox 控件
/// 选中文本位置,从(0)开始计算
/// 选中文本长度
/// 设置选中字体大小
private static void changeHelp(RichTextBox rich, int start, int length, float fontsize)
{
rich.Select(start, length - start);
if (rich.SelectionFont != null)
{
Font oldFont = rich.SelectionFont;
rich.SelectionFont = new Font(oldFont.Name, fontsize);
}
else
{
int mid = (start + length) / 2;
changeHelp(rich, start, mid, fontsize);
changeHelp(rich, mid, length, fontsize);
}
}
/// 设置字体样式(二)
///
/// RichTextBox 控件
/// 选中文本位置,从(0)开始计算
/// 选中文本长度
/// 设置选中字体大小
/// 字体样式:普通,粗体,斜体,删除线,下划线 样式
private static void changeHelp(RichTextBox rich, int start, int length, float fontsize, FontStyle style)
{
rich.Select(start, length - start);
if (rich.SelectionFont != null)
{
Font oldFont = rich.SelectionFont;
rich.SelectionFont = new Font(oldFont.Name, fontsize, style);
}
else
{
int mid = (start + length) / 2;
changeHelp(rich, start, mid, fontsize, style);
changeHelp(rich, mid, length, fontsize, style);
}
}
/// 设置字体样式(三)
///
/// RichTextBox 控件
/// 选中文本位置,从(0)开始计算
/// 选中文本长度
/// 设置选中字体大小
/// 字体样式:普通,粗体,斜体,删除线,下划线 样式
/// 设置字体颜色
private static void changeHelp(RichTextBox rich, int start, int length, float fontsize, FontStyle style, Color color)
{
rich.Select(start, length - start);
if (rich.SelectionFont != null)
{
Font oldFont = rich.SelectionFont;
rich.SelectionFont = new Font(oldFont.Name, fontsize, style);
rich.SelectionColor = color;
}
else
{
int mid = (start + length) / 2;
changeHelp(rich, start, mid, fontsize, style, color);
changeHelp(rich, mid, length, fontsize, style, color);
}
}
/// FontStyle 多样化
///
///
private static FontStyle FontStyleBius(int i)
{
FontStyle style;
switch (i)
{
case 1:
style = FontStyle.Bold;
return style;
case 2:
style = FontStyle.Italic;
return style;
case 3:
style = FontStyle.Underline;
return style;
case 4:
style = FontStyle.Strikeout;
return style;
case 5:
style = (FontStyle)(FontStyle.Bold | FontStyle.Italic);
return style;
case 6:
style = (FontStyle)(FontStyle.Bold | FontStyle.Underline);
return style;
case 7:
style = (FontStyle)(FontStyle.Bold | FontStyle.Strikeout);
return style;
case 8:
style = (FontStyle)(FontStyle.Italic | FontStyle.Underline);
return style;
case 9:
style = (FontStyle)(FontStyle.Italic | FontStyle.Strikeout);
return style;
case 10:
style = (FontStyle)(FontStyle.Underline | FontStyle.Strikeout);
return style;
case 11:
style = (FontStyle)(FontStyle.Italic | FontStyle.Underline | FontStyle.Strikeout);
return style;
case 12:
style = (FontStyle)(FontStyle.Bold | FontStyle.Underline | FontStyle.Strikeout);
return style;
case 13:
style = (FontStyle)(FontStyle.Bold | FontStyle.Italic | FontStyle.Strikeout);
return style;
case 14:
style = (FontStyle)(FontStyle.Bold | FontStyle.Italic | FontStyle.Underline);
return style;
case 15:
style = (FontStyle)(FontStyle.Bold | FontStyle.Italic | FontStyle.Underline | FontStyle.Strikeout);
return style;
default:
style = FontStyle.Regular;
return style;
}
}
#endregion 少复制了个 ‘}’
上面少复制了个‘}’ 注意添加就好。
下面的 changeFontSize 方法 放在加载项 或 button1_Click 中。
注意一下 changeFontSize 方法 的第三个参数,参数3 > =16 或 =0 ,字体样式为 style = FontStyle.Regular;(普通样式) 粗、斜、下划、删除没有了。
private void button2_Click(object sender, EventArgs e)
{
richTextBox1.Select(2, 35);
SetFontSytyle.changeFontSize(richTextBox1, 14);
//SetFontSytyle.changeFontSize(richTextBox1, 14, FontStyle.Bold);
//SetFontSytyle.changeFontSize(richTextBox1, 14, FontStyle.Bold, Color.Red);
//SetFontSytyle.changeFontSize(richTextBox1, 14, (FontStyle)(FontStyle.Bold | FontStyle.Italic | FontStyle.Underline), Color.Red);
//SetFontSytyle.changeFontSize(richTextBox1, 14, 15);
//SetFontSytyle.changeFontSize(richTextBox1, 14, 15, Color.Red);
}
上面的 changeFontSize 方法 +4重载。
去掉注释轮流试一下。
上效果图: