任何人都可以向我解释以下代码:
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?);
为什么颜色后面有?
,这表示什么?
答案 0 :(得分:3)
?意味着Color应该是Nullable。 SInce Color是一个枚举,它通常不可为空,它是一个值类型(检查this以获取对值类型和参考类型的解释)。添加?意味着只需在这段代码中,变量就可以设置为null
。可以在此处找到Nullable Types的解释。
此外,default(Color?)
语句会将变量初始化为默认值Color?
,这可能是白色,或者是因为?,null
答案 1 :(得分:2)
基本上,为您提供一种非常快速的方法,可以将应用程序中所有窗口的背景更改为常用颜色。
重要的部分是私人静态......和公共静态......
要更改所有打开表单的背景,请执行以下操作:
FormEx.GlobalBackgroundColor = ...这里有一些颜色..
它将遍历属于应用程序的每个窗口并更改其背景颜色(基本上Invalidate将强制它重绘自己)。