在类中更改字体样式而不是交互并防止重复代码

时间:2016-03-14 23:22:58

标签: c#

我正在重新编码(我几乎没有经验教训)。我正在尝试创建一个hello world程序,您可以在其中更改字体的所有方面,目​​前我一直在改变类中的字体样式。

我想在课堂上这样做的原因是因为我不想在Bold,Italics和Underline的每个复选框后面重复相同的代码。到目前为止,我已经设法得到一个基本的概念,但我觉得它漫长而冗长,可以缩短或至少制成某种形式的类,以便在需要时调用。这就是我到目前为止所做的:

    private void chkItalics_CheckedChanged(object sender, EventArgs e)
    {
        if (chkItalics.Checked == true)
        {
            Italics = true;
        }
        else
        {
            Italics = false;
        }

        if ((Italics == true) && (Bold == false) && (Underline == false))
        {
            lblHello.Font = new System.Drawing.Font(FontType, FontSize, FontStyle.Italic);
        }
        else if ((Italics == true) && (Bold == true) && (Underline == false))
        {
            lblHello.Font = new System.Drawing.Font(FontType, FontSize, FontStyle.Italic | FontStyle.Bold);
        }
        else if ((Italics == true) && (Bold == true) && (Underline == true))
        {
            lblHello.Font = new System.Drawing.Font(FontType, FontSize, FontStyle.Italic | FontStyle.Bold | FontStyle.Underline);
        }
        else if ((Italics == false) && (Bold == true) && (Underline == false))
        {
            lblHello.Font = new System.Drawing.Font(FontType, FontSize, FontStyle.Bold);
        }
        else if ((Italics == false) && (Bold == true) && (Underline == true))
        {
            lblHello.Font = new System.Drawing.Font(FontType, FontSize, FontStyle.Bold | FontStyle.Underline);
        }
        else if ((Italics == false) && (Bold == false) && (Underline == true))
        {
            lblHello.Font = new System.Drawing.Font(FontType, FontSize, FontStyle.Underline);
        }
        else
        {
            lblHello.Font = new System.Drawing.Font(FontType, FontSize, FontStyle.Regular);
        }

如上所述相当凌乱和笨重,任何帮助将非常感激。我确实考虑过做一个Switch而不是所有的if语句,但却找不到将上述所有内容都纳入其中的方法。

但最重要的是试图把它变成一个类,因为我没有运气,因为C#中的类似乎不喜欢从类外部引用表单控件和变量。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

FontStyle fontStyle = FontStyle.Regular;

if (Underline) { fontStyle |= FontStyle.Underline; }
// ..

lblHello.Font = new System.Drawing.Font(FontType, FontSize, fontStyle);

我会将事件绑定到单个检查更改的处理程序。您还可以引入一些计算属性:

public bool Underline { get { return chkUnderline.Checked; } }