解释此代码的工作原理(C#)

时间:2009-07-15 05:28:03

标签: c# winforms

任何人都可以向我解释以下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace web.frmcolor
{
  public class FormEx : Form
  {
    /// <summary>
    /// Set the default color for the designer
    /// </summary>
    static FormEx()
    {
      _globalBackgroundColor = default(Color?);
    }

    private static void InvalidateForms()
    {
      try
      {
        for (int i1 = 0; i1 < Application.OpenForms.Count; i1++)
        {
          try
          {
            FormEx frm = (Application.OpenForms[i1] as FormEx);
            if (frm != null)
            {
              frm.Invalidate(true);
              frm.Refresh();
            }
          }
          catch 
          { 
            //Should never happen
          }
        }
      }
      catch
      {
        //this will catch if the form count changes
      }
    }

    private static Color? _globalBackgroundColor;
    /// <summary>
    /// Sets the background color for all forms
    /// </summary>
    public static Color? GlobalBackgroundColor
    {
      get { return FormEx._globalBackgroundColor; }
      set 
      {
        if (FormEx._globalBackgroundColor != value)
        {
          FormEx._globalBackgroundColor = value;
          InvalidateForms();
        }
      }
    }

    public override Color BackColor
    {
      get
      {
        return (_globalBackgroundColor == null ? base.BackColor : (Color)_globalBackgroundColor);
      }
      set
      {
        base.BackColor = value;
      }
    }

    /// <summary>
    /// Create a new colored form
    /// </summary>
    public FormEx()
      : base()
    {
    }

    private void InitializeComponent()
    {
        this.SuspendLayout();
        // 
        // FormEx
        // 
        this.ClientSize = new System.Drawing.Size(292, 266);
        this.Name = "FormEx";
        this.Load += new System.EventHandler(this.FormEx_Load);
        this.ResumeLayout(false);

    }

    private void FormEx_Load(object sender, EventArgs e)
    {

    }


  }
}

由于我是初学者,我无法理解上述编码的工作原理。我在浏览互联网时发现了这种编码。

我不明白的部分是:

_globalBackgroundColor = default(Color?);

为什么颜色后面有?,这表示什么?

2 个答案:

答案 0 :(得分:3)

?意味着Color应该是Nullable。 SInce Color是一个枚举,它通常不可为空,它是一个值类型(检查this以获取对值类型和参考类型的解释)。添加?意味着只需在这段代码中,变量就可以设置为null。可以在此处找到Nullable Types的解释。 此外,default(Color?)语句会将变量初始化为默认值Color?,这可能是白色,或者是因为?,null

答案 1 :(得分:2)

基本上,为您提供一种非常快速的方法,可以将应用程序中所有窗口的背景更改为常用颜色。

重要的部分是私人静态......和公共静态......

要更改所有打开表单的背景,请执行以下操作:

FormEx.GlobalBackgroundColor = ...这里有一些颜色..

它将遍历属于应用程序的每个窗口并更改其背景颜色(基本上Invalidate将强制它重绘自己)。