In the color dialog box I am selecting a color but the color and pressing Ok button but the color is not changed.
The above code does not generate any error.
Try this code out. You must build it before you can view the forms in the designer -- so when you first open it just close all the files, do a build, then use the designer. "FormEx.cs" is a descendant of "Form" and is just a class file -- not a form. You need to right click on it and "View Code".
This uses static skinning for form colors. Here is the guts of the logic:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
namespace daniweb.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()
{
}
}
}