使字体变为斜体并加粗

32
如何将多种字体样式应用于文本?
System.Drawing.Font MyFont = new System.Drawing.Font(
    thisTempLabel.LabelFont,
    ((float)thisTempLabel.fontSize),
    FontStyle.Bold + FontStyle.Italic,    // + obviously doesn't work, but what am I meant to do?
    GraphicsUnit.Pixel
);

感谢您的任何帮助!

你想在同一组字符中应用多种字体样式吗?这是否可能?或者,你想在同一个单词中为不同的字符应用不同的样式? - Unmesh Kondolikar
@Unmesh,我希望它是斜体和粗体。 - Tom Gullen
5个回答

57
System.Drawing.Font MyFont = new System.Drawing.Font(
    thisTempLabel.LabelFont,
    ((float)thisTempLabel.fontSize),
    FontStyle.Bold | FontStyle.Italic,
    GraphicsUnit.Pixel
);
也许你想要使用OR运算符(|)。

2
好像可以工作,谢谢!不过我不明白它的逻辑是什么? - Tom Gullen
6
@Tom - 这是一个“按位或”运算符。FontStyles枚举类型的基础值(必须具有“[Flags]”属性)被设计为可以以这种方式组合。 - Hans Kesting
@Hans,谢谢,我明白了,所以 | 将评估所有条件,无论它们中的任何一个是真/假? - Tom Gullen
2
枚举类型基本上是整数。正如汉斯所说,有一些特殊的枚举类型被标记为[Flags]属性,以便每个值的二进制表示形式只有一个1(对于我在帖子中的所有文字游戏感到抱歉...),并且所有0和没有其他值在该位置上有1。因此,位运算AND和OR保留了有关所选所有值的信息。当后端读取该值时,它通过将其与要测试的值进行AND运算来测试标志的“激活”(因此,如果(value && FontStyle.italic)renderItalic(),类似于这样)。 - usr-local-ΕΨΗΕΛΩΝ
2
@dj @hans,啊哈,好的!所以字体样式的枚举将会像0000一样,然后每个样式就像1000 0100 0010 0001一样,我们将它们组合起来,使得所有的都设置为true,对吗? - Tom Gullen
显示剩余2条评论

11

FontStyle是一个标志枚举,因此您可以通过以下方式设置多个样式:

FontStyle.Bold | FontStyle.Italic

5

2

我认为你可以受益于一个字体类:

/*controlName*/.SelectionFont=new Font(maintext.Font, FontStyle.Italic);

1

你好,我正在编写一个简单的文本编辑器,遇到了同样的问题,在互联网上没有找到有用的信息。如果表单中有很多按钮,if、else if方法并不是最优解,所以我想为什么不使用现有的font.style,像上面建议的那样,使用|符号进行添加呢?我测试了这段代码,它可以工作。我从pictureBox中调用这个方法。

更新。我发现了一个错误。当你取消选择一个字体时,它会将所有其他字体都重置为常规字体。但是,组合它们的代码可以正常工作。

private void ChangeFontStyle(PictureBox p)
        {
            if (p == pictureBox1)
            {
                if (BClicked)
                {
                    richTextBox1.SelectionFont = new Font(richTextBox1.Font, richTextBox1.Font.Style | FontStyle.Bold);
                }
                else 
                {
                    richTextBox1.SelectionFont = new Font(richTextBox1.Font, richTextBox1.Font.Style | FontStyle.Regular);
                }
            }
            else if (p == pictureBox2)
            {
                if (IClicked)
                {
                    richTextBox1.SelectionFont = new Font(richTextBox1.Font, richTextBox1.Font.Style | FontStyle.Italic);
                }
                else 
                {
                    richTextBox1.SelectionFont = new Font(richTextBox1.Font,  richTextBox1.Font.Style | FontStyle.Regular);
                }
            }
            else if (p == pictureBox3)
            {
                if (UClicked)
                {
                    richTextBox1.SelectionFont = new Font(richTextBox1.Font, richTextBox1.SelectionFont.Style | FontStyle.Underline);
                }
                else
                {
                    richTextBox1.SelectionFont = new Font(richTextBox1.Font, richTextBox1.Font.Style | FontStyle.Regular);
                }
            }
        }         

附言:我使用了图片框而不是按钮,还使用了布尔变量(如BClicked)来指示它们是否被激活。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接