C#RichTextBox更改字体(Font)[大小,粗/斜/下划/删除,变色]

基于 [博客园-《叩响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.粗、斜、下、删


        /// <summary> 设置选中字体样式(1) <para> </para>
        /// 此方法有五种形式:<para> </para>
        /// 1.)只改变字体大小 <para></para>2.)在1的基本上,粗、斜体、下划线、删除线样式 
        /// <para></para>3.)在2的基本上,高亮模式(字体上色)<para> </para>
        /// 4.)可同时设置〖FontStyle〗多样化 <para></para>5.)在4的基本上设置字体颜色<para> </para></summary>
        /// <param name="rich">RichTextBox 控件</param>
        /// <param name="fontsize">设置选中字体大小,设置时应为(0.5)的倍数。</param>
        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);
        }

        /// <summary> 设置选中字体样式(2) <para> </para>
        /// 此方法有五种形式:<para> </para>
        /// 1.)只改变字体大小 <para></para>2.)在1的基本上,粗、斜体、下划线、删除线样式 
        /// <para></para>3.)在2的基本上,高亮模式(字体上色)<para> </para>
        /// 4.)可同时设置〖FontStyle〗多样化 <para></para>5.)在4的基本上设置字体颜色 </summary>
        /// <param name="rich">RichTextBox 控件</param>
        /// <param name="fontsize">设置选中字体大小,设置时应为(0.5)的倍数。</param>
        /// <param name="style">字体样式:普通,粗体,斜体,删除线,下划线 样式</param>
        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);
        }

        /// <summary> 设置选中字体样式(3) <para> </para>
        /// 此方法有五种形式:<para> </para>
        /// 1.)只改变字体大小 <para></para>2.)在1的基本上,粗、斜体、下划线、删除线样式 
        /// <para></para>3.)在2的基本上,高亮模式(字体上色)<para> </para>
        /// 4.)可同时设置〖FontStyle〗多样化 <para></para>5.)在4的基本上设置字体颜色 </summary>
        /// <param name="rich">RichTextBox 控件</param>
        /// <param name="fontsize">设置选中字体大小,设置时应为(0.5)的倍数。</param>
        /// <param name="style">字体样式:普通,粗体,斜体,删除线,下划线 样式</param>
        /// <param name="color">设置选中字体颜色</param>
        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);
        }

        /// <summary> 设置选中字体样式(4) <para> </para>
        /// 此方法有五种形式:<para></para>
        /// 1.)只改变字体大小 <para></para>2.)在1的基本上,粗、斜体、下划线、删除线样式 
        /// <para></para>3.)在2的基本上,高亮模式(字体上色)<para></para>
        /// 4.)可同时设置〖FontStyle〗多样化 <para></para>5.)在4的基本上设置字体颜色 </summary>
        /// <param name="rich">RichTextBox 控件</param>
        /// <param name="fontsize">设置选中字体大小,设置时应为(0.5)的倍数。</param>
        /// <param name="cont">Int值 十六种字体样式 以下数字代表:<para></para>
        /// 1.粗体 2.斜体 3.下划线 4.删除线 <para></para>
        /// 5.粗体+斜体 6.粗体+下划线 7.粗体+删除线 8.斜体+下划线 9.斜体+删除线 10.下划线+删除线<para></para>
        /// 11.斜体+下划线+删除线 12.粗体+下划线+删除线 13.粗体+斜体+删除线 14.粗体+斜体+下划线<para></para>
        /// 15.粗、斜、下、删</param>
        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);
        }

        /// <summary> 设置选中字体样式(5) <para> </para>
        /// 此方法有五种形式:<para></para>
        /// 1.)只改变字体大小 <para></para>2.)在1的基本上,粗、斜体、下划线、删除线样式 
        /// <para></para>3.)在2的基本上,高亮模式(字体上色)<para></para>
        /// 4.)可同时设置〖FontStyle〗多样化 <para></para>5.)在4的基本上设置字体颜色 </summary>
        /// <param name="rich">RichTextBox 控件</param>
        /// <param name="fontsize">设置选中字体大小,设置时应为(0.5)的倍数。</param>
        /// <param name="cont">Int值 十六种字体样式 以下数字代表:<para></para>
        /// 1.粗体 2.斜体 3.下划线 4.删除线 <para></para>
        /// 5.粗体+斜体 6.粗体+下划线 7.粗体+删除线 8.斜体+下划线 9.斜体+删除线 10.下划线+删除线<para></para>
        /// 11.斜体+下划线+删除线 12.粗体+下划线+删除线 13.粗体+斜体+删除线 14.粗体+斜体+下划线<para></para>
        /// 15.粗、斜、下、删</param>
        /// <param name="color">设置选中字体颜色</param>
        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 =★=*=*=★= 设置字体样式〖调用方法〗 =★=*=*=★=
        /// <summary> 设置字体样式(一)
        /// <para></para> </summary>
        /// <param name="rich">RichTextBox 控件</param>
        /// <param name="start">选中文本位置,从(0)开始计算</param>
        /// <param name="end">选中文本长度</param>
        /// <param name="fontsize">设置选中字体大小</param>
        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);
            }
        }

        /// <summary> 设置字体样式(二)
        /// <para></para> </summary>
        /// <param name="rich">RichTextBox 控件</param>
        /// <param name="start">选中文本位置,从(0)开始计算</param>
        /// <param name="end">选中文本长度</param>
        /// <param name="fontsize">设置选中字体大小</param>
        /// <param name="style">字体样式:普通,粗体,斜体,删除线,下划线 样式</param>
        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);
            }
        }

        /// <summary> 设置字体样式(三)
        /// <para></para> </summary>
        /// <param name="rich">RichTextBox 控件</param>
        /// <param name="start">选中文本位置,从(0)开始计算</param>
        /// <param name="end">选中文本长度</param>
        /// <param name="fontsize">设置选中字体大小</param>
        /// <param name="style">字体样式:普通,粗体,斜体,删除线,下划线 样式</param>
        /// <param name="color">设置字体颜色</param>
        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);
            }
        }

        /// <summary> FontStyle 多样化 </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        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重载。

去掉注释轮流试一下。

上效果图:




  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值