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.粗、斜、下、删


        ///  设置选中字体样式(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重载。

去掉注释轮流试一下。

上效果图:

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

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


你可能感兴趣的:(.NET/C#)