Back to design time support, but this time with ASP.NET server controls, most complex & simple controls built in the .NET framework are associated with an Auto Format.. link in the smart tag as the one shown in the figure, I showed in a previous post how to add links and properties to the smart tag of a control.
Ok, now when clicking that link a new window is popped out and you get a list of predefined formats on the left and a preview panel in the right like this.
Of course if you want to implement these features you will not have to design a new windows form and deal with all the head ache for previewing and those. You only will need some basic steps, I will show next, Assuming you already have your own custom control ( I will just use a simple LabelEx control for this sample);
1- Define your designer.
class LabelExDesigner : ControlDesigner
{
}
2- override the AutoFormats property and return some DesignerAutoFormats, to be used.
private DesignerAutoFormatCollection _autoformats = null;
public override DesignerAutoFormatCollection AutoFormats
{
get
{
if (_autoformats == null)
{
_autoformats = new DesignerAutoFormatCollection();
_autoformats.Add(new LabelExAutoFormat("Remove All"));
_autoformats.Add(new LabelExAutoFormat("Reddish"));
_autoformats.Add(new LabelExAutoFormat("Blueish"));
}
return _autoformats;
}
}
3- Define a custom DesignerAutoFormat, which comes with an abstract Apply method, which is called when trying to apply a format on the preview control.
class LabelExAutoFormat : DesignerAutoFormat
{
public LabelExAutoFormat(string name)
: base(name)
{ }
public override void Apply(Control control)
{
if (control is LabelEx)
{
LabelEx ctrl = control as LabelEx;
switch (this.Name)
{
case "Remove All":
ctrl.ControlStyle.Reset();
break;
case "Reddish":
ctrl.ControlStyle.ForeColor = ColorTranslator.FromHtml("#ff0000");
ctrl.ControlStyle.BackColor = ColorTranslator.FromHtml("#ffccff");
ctrl.ControlStyle.Font.Bold = true;
break;
case "Blueish":
ctrl.ControlStyle.ForeColor = ColorTranslator.FromHtml("#0000ff");
ctrl.ControlStyle.BackColor = ColorTranslator.FromHtml("#99ccff");
ctrl.ControlStyle.Font.Italic = true;
break;
}
}
}
}
4- And don't forget to decorate the control with the designer attribute
[Designer(typeof(LabelExDesigner))]
public class LabelEx : Label
{
}
And now everything is set and you have your own auto formats.
Here is the code and Happy Coding...