繁体   English   中英

使用Binary或FontStyles的动态Enum标志数

[英]Dynamic Number of Enum Flags Using Binary OR For FontStyles

我正在开发应用程序中的功能,该功能允许用户保存其首选字体(字体,大小,带下划线,粗体或斜体)。 首先,我要说的是,在开发,二进制或在构造函数内部的最初几年中,我并没有使用过多的枚举,因此我在该领域的知识很薄弱。

众所周知,设置新字体非常简单。

Font font = new Font("Arial", FontStyle.Bold | FontStyle.Underline);

我的问题是,是否有一种干净的方式将下划线,粗体或斜体的任何组合传递给构造函数,而这些组合可能都不是,可能只是粗体,粗体或斜体等?

清洁对我来说不必做这样的事情。

if(myFont.Bold || myFont.Underline || myFont.Italic)
{
    font = new Font("Arial", FontStyle.Bold | FontStyle.Underline | FontStyle.Italic);
}
else if(myFont.Bold || myFont.Underline)
{
    font = new Font("Arial", FontStyle.Bold | FontStyle.Underline);
}
else if(myFont.Bold || myFont.Italic)
{
    font = new Font("Arial", FontStyle.Bold | FontStyle.Italic);
}

...等等

您可以执行以下操作:

string fontName = "Arial";
FontStyle style = FontStyle.Regular;

if (myFont.Bold)
    style |= FontStyle.Bold;

if (myFont.Underline)
    style |= FontStyle.Underline;

if (myFont.Italic)
    style |= FontStyle.Italic;

Font font = new Font(fontName, style);

您不能有多个具有相同签名的构造函数,因此这不是入门,除非您人为地创建伪参数以区别它们。

相反,您应该创建不同的静态方法,例如静态MyClass CreateBoldItalic(),针对每种所需组合使用一个。 然后,这些将使用您选择的组合实例化该类。

你可以做这样的事情。 使用Font的构造函数的此重载,或使用任何适合您的重载。

Font myFont = ...;//get your font
Font font = new Font("Arial", myFont.Size, myFont.Style);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM