[英]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.