Sheetal
Sheetal

Reputation: 873

Explanation of how this code works (C#)

Can anyone explain me the following code:

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)
    {

    }


  }
}

Since I am a beginner I am not able to understand how the above coding works. I found this coding while browsing through internet.

The part I don't understand is this:

_globalBackgroundColor = default(Color?);

Why there is a ? after the color, what does that indicate?

Upvotes: 1

Views: 290

Answers (2)

Colin
Colin

Reputation: 10638

The ? means that Color should be Nullable. SInce Color is an Enum, it normally isn't nullable, it is a value type (Check this out for an explanation of Value Types and Reference Types). Adding the ? means that just in this piece of code the variable can be set to null. An explanation of Nullable Types can be found here. Furhtermore the default(Color?) statement initializes the variable to the default value of Color?, which is probably white, or because of the ?, null

Upvotes: 3

Jimmy Chandra
Jimmy Chandra

Reputation: 6580

Basically, provide you with a very quick way to change the background of all windows in the application to a common color.

The important part is the private static ... and the public static ...

To change the background of all open form you do:

FormEx.GlobalBackgroundColor = ...some color here..

It will go through each windows belonging to the application and change their the background colors (basically Invalidate will force it to repaint itself).

Upvotes: 2

Related Questions