Объяснение того, как работает этот код (C #) - PullRequest
1 голос
/ 15 июля 2009

Может кто-нибудь объяснить мне следующий код:

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 ]

3 голосов
/ 15 июля 2009

? означает, что цвет должен быть Nullable. SInce Color - это Enum, обычно он не обнуляемый, это тип значения (проверьте this для объяснения типов значений и ссылочных типов). Добавление? означает, что только в этом фрагменте кода переменная может быть установлена ​​на null. Объяснение Nullable Types можно найти здесь. Кроме того, оператор default(Color?) инициализирует переменную значением по умолчанию Color?, которое, вероятно, является белым или из-за?, null

2 голосов
/ 15 июля 2009

По сути, очень быстрый способ изменить цвет фона всех окон приложения на общий.

Важной частью является приватная статика ... и публичная статика ...

Чтобы изменить фон всей открытой формы, вы делаете:

FormEx.GlobalBackgroundColor = ... немного цвета здесь ..

Он будет проходить через все окна, принадлежащие приложению, и менять их фоновые цвета (в основном, Invalidate заставит его перекрашиваться).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...