Creating A Simple DotNet MonthCalendar And Changing Its Colors

The following example creates a simple dialog with a MonthCalendar dotNet control and assigns a mousedown event handler which prints the properties, methods and events:

EXAMPLE

rollout test "test" height:200 width:220
(
dotNetControl f1 "MonthCalendar" align:#left height:180 width:200
on f1 mousedown val do
(
format "in mousedown handler: arg: %\n" val
format "showproperties:\n"
showproperties val
format "showmethods:\n"
showmethods val
format "showevents:\n"
showevents val
format "getpropnames : %\n" (getpropnames val)
format "prop values:\n"
)
)
createdialog test escapeEnable:true

After evaluation, we have a dialog showing a Month Calendar DotNet Control with default settings. We can see the constructor of the control using the dotnet.showconstructors() method:

EXAMPLE

 --see the constructor of the control
dotnet.showConstructors test.f1
System.Windows.Forms.MonthCalendar()
true

Now let's change the calendar's appearance by modifying its colors:

EXAMPLE

 --First we list all properties of the control --and look to find those controlling some of its colors:
showproperties test.f1
.AccessibilityObject : <System.Windows.Forms.AccessibleObject>, read-only
.AccessibleDefaultActionDescription : <System.String>
.AccessibleDescription : <System.String>
.AccessibleName : <System.String>
.AccessibleRole : <System.Windows.Forms.AccessibleRole>
.AllowDrop : <System.Boolean>
.Anchor : <System.Windows.Forms.AnchorStyles>
.AnnuallyBoldedDates : <System.DateTime[]>
.AutoScrollOffset : <System.Drawing.Point>
.AutoSize : <System.Boolean>
 .BackColor : <System.Drawing.Color>
.BackgroundImage : <System.Drawing.Image> .BackgroundImageLayout : <System.Windows.Forms.ImageLayout> .BindingContext : <System.Windows.Forms.BindingContext> .BoldedDates : <System.DateTime[]> .Bottom : <System.Int32>, read-only .Bounds : <System.Drawing.Rectangle> .CalendarDimensions : <System.Drawing.Size> .CanFocus : <System.Boolean>, read-only .CanSelect : <System.Boolean>, read-only .Capture : <System.Boolean> .CausesValidation : <System.Boolean> .CheckForIllegalCrossThreadCalls : <System.Boolean>, static .ClientRectangle : <System.Drawing.Rectangle>, read-only .ClientSize : <System.Drawing.Size> .CompanyName : <System.String>, read-only .Container : <System.ComponentModel.IContainer>, read-only .ContainsFocus : <System.Boolean>, read-only .ContextMenu : <System.Windows.Forms.ContextMenu> .ContextMenuStrip : <System.Windows.Forms.ContextMenuStrip> .Controls : <System.Windows.Forms.Control+ControlCollection>, read-only .Created : <System.Boolean>, read-only .Cursor : <System.Windows.Forms.Cursor> .DataBindings : <System.Windows.Forms.ControlBindingsCollection>, read-only .DefaultBackColor : <System.Drawing.Color>, read-only, static .DefaultFont : <System.Drawing.Font>, read-only, static .DefaultForeColor : <System.Drawing.Color>, read-only, static .DisplayRectangle : <System.Drawing.Rectangle>, read-only .Disposing : <System.Boolean>, read-only .Dock : <System.Windows.Forms.DockStyle> .Enabled : <System.Boolean> .FirstDayOfWeek : <System.Windows.Forms.Day> .Focused : <System.Boolean>, read-only .Font : <System.Drawing.Font>
 .ForeColor : <System.Drawing.Color>
.Handle : <System.IntPtr>, read-only .HasChildren : <System.Boolean>, read-only .Height : <System.Int32> .ImeMode : <System.Windows.Forms.ImeMode> .InvokeRequired : <System.Boolean>, read-only .IsAccessible : <System.Boolean> .IsDisposed : <System.Boolean>, read-only .IsHandleCreated : <System.Boolean>, read-only .IsMirrored : <System.Boolean>, read-only .LayoutEngine : <System.Windows.Forms.Layout.LayoutEngine>, read-only .Left : <System.Int32> .Location : <System.Drawing.Point> .Margin : <System.Windows.Forms.Padding> .MaxDate : <System.DateTime> .MaximumSize : <System.Drawing.Size> .MaxSelectionCount : <System.Int32> .MinDate : <System.DateTime> .MinimumSize : <System.Drawing.Size> .ModifierKeys : <System.Windows.Forms.Keys>, read-only, static .MonthlyBoldedDates : <System.DateTime[]> .MouseButtons : <System.Windows.Forms.MouseButtons>, read-only, static .MousePosition : <System.Drawing.Point>, read-only, static .Name : <System.String> .Padding : <System.Windows.Forms.Padding> .Parent : <System.Windows.Forms.Control> .PreferredSize : <System.Drawing.Size>, read-only .ProductName : <System.String>, read-only .ProductVersion : <System.String>, read-only .RecreatingHandle : <System.Boolean>, read-only .Region : <System.Drawing.Region> .Right : <System.Int32>, read-only .RightToLeft : <System.Windows.Forms.RightToLeft> .RightToLeftLayout : <System.Boolean> .ScrollChange : <System.Int32> .SelectionEnd : <System.DateTime> .SelectionRange : <System.Windows.Forms.SelectionRange> .SelectionStart : <System.DateTime> .ShowToday : <System.Boolean> .ShowTodayCircle : <System.Boolean> .ShowWeekNumbers : <System.Boolean> .SingleMonthSize : <System.Drawing.Size>, read-only .Site : <System.ComponentModel.ISite> .Size : <System.Drawing.Size> .TabIndex : <System.Int32> .TabStop : <System.Boolean> .Tag : <System.Object> .Text : <System.String>
 .TitleBackColor : <System.Drawing.Color>
.TitleForeColor : <System.Drawing.Color> .TodayDate : <System.DateTime> .TodayDateSet : <System.Boolean>, read-only .Top : <System.Int32> .TopLevelControl : <System.Windows.Forms.Control>, read-only .TrailingForeColor : <System.Drawing.Color> .UseWaitCursor : <System.Boolean> .Visible : <System.Boolean> .Width : <System.Int32> .WindowTarget : <System.Windows.Forms.IWindowTarget> true

Using DotNet Color Presets

We want to change the color properties of the control. Let's take a look at their own properties first:

showproperties test.f1.ForeColor --see all properties of the color
.A : <System.Byte>, read-only
.AliceBlue : <System.Drawing.Color>, read-only, static
.AntiqueWhite : <System.Drawing.Color>, read-only, static
.Aqua : <System.Drawing.Color>, read-only, static
.Aquamarine : <System.Drawing.Color>, read-only, static
.Azure : <System.Drawing.Color>, read-only, static
.B : <System.Byte>, read-only
.Beige : <System.Drawing.Color>, read-only, static
.Bisque : <System.Drawing.Color>, read-only, static
.Black : <System.Drawing.Color>, read-only, static
.BlanchedAlmond : <System.Drawing.Color>, read-only, static
.Blue : <System.Drawing.Color>, read-only, static
.BlueViolet : <System.Drawing.Color>, read-only, static
.Brown : <System.Drawing.Color>, read-only, static
.BurlyWood : <System.Drawing.Color>, read-only, static
.CadetBlue : <System.Drawing.Color>, read-only, static
.Chartreuse : <System.Drawing.Color>, read-only, static
.Chocolate : <System.Drawing.Color>, read-only, static
.Coral : <System.Drawing.Color>, read-only, static
.CornflowerBlue : <System.Drawing.Color>, read-only, static
.Cornsilk : <System.Drawing.Color>, read-only, static
.Crimson : <System.Drawing.Color>, read-only, static
.Cyan : <System.Drawing.Color>, read-only, static
.DarkBlue : <System.Drawing.Color>, read-only, static
.DarkCyan : <System.Drawing.Color>, read-only, static
.DarkGoldenrod : <System.Drawing.Color>, read-only, static
.DarkGray : <System.Drawing.Color>, read-only, static
.DarkGreen : <System.Drawing.Color>, read-only, static
.DarkKhaki : <System.Drawing.Color>, read-only, static
.DarkMagenta : <System.Drawing.Color>, read-only, static
.DarkOliveGreen : <System.Drawing.Color>, read-only, static
.DarkOrange : <System.Drawing.Color>, read-only, static
.DarkOrchid : <System.Drawing.Color>, read-only, static
.DarkRed : <System.Drawing.Color>, read-only, static
.DarkSalmon : <System.Drawing.Color>, read-only, static
.DarkSeaGreen : <System.Drawing.Color>, read-only, static
.DarkSlateBlue : <System.Drawing.Color>, read-only, static
.DarkSlateGray : <System.Drawing.Color>, read-only, static
.DarkTurquoise : <System.Drawing.Color>, read-only, static
.DarkViolet : <System.Drawing.Color>, read-only, static
.DeepPink : <System.Drawing.Color>, read-only, static
.DeepSkyBlue : <System.Drawing.Color>, read-only, static
.DimGray : <System.Drawing.Color>, read-only, static
.DodgerBlue : <System.Drawing.Color>, read-only, static
.Firebrick : <System.Drawing.Color>, read-only, static
.FloralWhite : <System.Drawing.Color>, read-only, static
.ForestGreen : <System.Drawing.Color>, read-only, static
.Fuchsia : <System.Drawing.Color>, read-only, static
.G : <System.Byte>, read-only
.Gainsboro : <System.Drawing.Color>, read-only, static
.GhostWhite : <System.Drawing.Color>, read-only, static
.Gold : <System.Drawing.Color>, read-only, static
.Goldenrod : <System.Drawing.Color>, read-only, static
.Gray : <System.Drawing.Color>, read-only, static
.Green : <System.Drawing.Color>, read-only, static
.GreenYellow : <System.Drawing.Color>, read-only, static
.Honeydew : <System.Drawing.Color>, read-only, static
.HotPink : <System.Drawing.Color>, read-only, static
.IndianRed : <System.Drawing.Color>, read-only, static
.Indigo : <System.Drawing.Color>, read-only, static
.IsEmpty : <System.Boolean>, read-only
.IsKnownColor : <System.Boolean>, read-only
.IsNamedColor : <System.Boolean>, read-only
.IsSystemColor : <System.Boolean>, read-only
.Ivory : <System.Drawing.Color>, read-only, static
.Khaki : <System.Drawing.Color>, read-only, static
.Lavender : <System.Drawing.Color>, read-only, static
.LavenderBlush : <System.Drawing.Color>, read-only, static
.LawnGreen : <System.Drawing.Color>, read-only, static
.LemonChiffon : <System.Drawing.Color>, read-only, static
.LightBlue : <System.Drawing.Color>, read-only, static
.LightCoral : <System.Drawing.Color>, read-only, static
.LightCyan : <System.Drawing.Color>, read-only, static
.LightGoldenrodYellow : <System.Drawing.Color>, read-only, static
.LightGray : <System.Drawing.Color>, read-only, static
.LightGreen : <System.Drawing.Color>, read-only, static
.LightPink : <System.Drawing.Color>, read-only, static
.LightSalmon : <System.Drawing.Color>, read-only, static
.LightSeaGreen : <System.Drawing.Color>, read-only, static
.LightSkyBlue : <System.Drawing.Color>, read-only, static
.LightSlateGray : <System.Drawing.Color>, read-only, static
.LightSteelBlue : <System.Drawing.Color>, read-only, static
.LightYellow : <System.Drawing.Color>, read-only, static
.Lime : <System.Drawing.Color>, read-only, static
.LimeGreen : <System.Drawing.Color>, read-only, static
.Linen : <System.Drawing.Color>, read-only, static
.Magenta : <System.Drawing.Color>, read-only, static
.Maroon : <System.Drawing.Color>, read-only, static
.MediumAquamarine : <System.Drawing.Color>, read-only, static
.MediumBlue : <System.Drawing.Color>, read-only, static
.MediumOrchid : <System.Drawing.Color>, read-only, static
.MediumPurple : <System.Drawing.Color>, read-only, static
.MediumSeaGreen : <System.Drawing.Color>, read-only, static
.MediumSlateBlue : <System.Drawing.Color>, read-only, static
.MediumSpringGreen : <System.Drawing.Color>, read-only, static
.MediumTurquoise : <System.Drawing.Color>, read-only, static
.MediumVioletRed : <System.Drawing.Color>, read-only, static
.MidnightBlue : <System.Drawing.Color>, read-only, static
.MintCream : <System.Drawing.Color>, read-only, static
.MistyRose : <System.Drawing.Color>, read-only, static
.Moccasin : <System.Drawing.Color>, read-only, static
.Name : <System.String>, read-only
.NavajoWhite : <System.Drawing.Color>, read-only, static
.Navy : <System.Drawing.Color>, read-only, static
.OldLace : <System.Drawing.Color>, read-only, static
.Olive : <System.Drawing.Color>, read-only, static
.OliveDrab : <System.Drawing.Color>, read-only, static
.Orange : <System.Drawing.Color>, read-only, static
.OrangeRed : <System.Drawing.Color>, read-only, static
.Orchid : <System.Drawing.Color>, read-only, static
.PaleGoldenrod : <System.Drawing.Color>, read-only, static
.PaleGreen : <System.Drawing.Color>, read-only, static
.PaleTurquoise : <System.Drawing.Color>, read-only, static
.PaleVioletRed : <System.Drawing.Color>, read-only, static
.PapayaWhip : <System.Drawing.Color>, read-only, static
.PeachPuff : <System.Drawing.Color>, read-only, static
.Peru : <System.Drawing.Color>, read-only, static
.Pink : <System.Drawing.Color>, read-only, static
.Plum : <System.Drawing.Color>, read-only, static
.PowderBlue : <System.Drawing.Color>, read-only, static
.Purple : <System.Drawing.Color>, read-only, static
.R : <System.Byte>, read-only
.Red : <System.Drawing.Color>, read-only, static
.RosyBrown : <System.Drawing.Color>, read-only, static
.RoyalBlue : <System.Drawing.Color>, read-only, static
.SaddleBrown : <System.Drawing.Color>, read-only, static
.Salmon : <System.Drawing.Color>, read-only, static
.SandyBrown : <System.Drawing.Color>, read-only, static
.SeaGreen : <System.Drawing.Color>, read-only, static
.SeaShell : <System.Drawing.Color>, read-only, static
.Sienna : <System.Drawing.Color>, read-only, static
.Silver : <System.Drawing.Color>, read-only, static
.SkyBlue : <System.Drawing.Color>, read-only, static
.SlateBlue : <System.Drawing.Color>, read-only, static
.SlateGray : <System.Drawing.Color>, read-only, static
.Snow : <System.Drawing.Color>, read-only, static
.SpringGreen : <System.Drawing.Color>, read-only, static
.SteelBlue : <System.Drawing.Color>, read-only, static
.Tan : <System.Drawing.Color>, read-only, static
.Teal : <System.Drawing.Color>, read-only, static
.Thistle : <System.Drawing.Color>, read-only, static
.Tomato : <System.Drawing.Color>, read-only, static
.Transparent : <System.Drawing.Color>, read-only, static
.Turquoise : <System.Drawing.Color>, read-only, static
.Violet : <System.Drawing.Color>, read-only, static
.Wheat : <System.Drawing.Color>, read-only, static
.White : <System.Drawing.Color>, read-only, static
.WhiteSmoke : <System.Drawing.Color>, read-only, static
.Yellow : <System.Drawing.Color>, read-only, static
.YellowGreen : <System.Drawing.Color>, read-only, static
.Empty : <System.Drawing.Color>, read-only, static
true

Looks like the color property itself has properties, some of them read-only definitions of typical colors! This means that we can set the .ForeColor and .BackColor properties to the static read-only values they already defined:

test.f1.ForeColor = test.f1.ForeColor.Blue
dotNetObject:System.Drawing.Color
test.f1.BackColor = test.f1.BackColor.Yellow
dotNetObject:System.Drawing.Color
test.f1.TitleBackColor = test.f1.TitleBackColor.Tomato
dotNetObject:System.Drawing.Color

Using User-Defined Colors

Of course, we can create our own DotNet colors instead of using the presets.

Let's take a look at the methods that a System.Drawing.Color object exposes:

showMethods test.f1.backcolor
.<System.Boolean>Equals <System.Object>obj
.[static]<System.Boolean>Equals <System.Object>objA <System.Object>objB
.[static]<System.Drawing.Color>FromArgb <System.Int32>argb
.[static]<System.Drawing.Color>FromArgb <System.Int32>alpha <System.Drawing.Color>baseColor
 .[static]<System.Drawing.Color>FromArgb <System.Int32>red <System.Int32>green <System.Int32>blue
.[static]<System.Drawing.Color>FromArgb <System.Int32>alpha <System.Int32>red <System.Int32>green <System.Int32>blue .[static]<System.Drawing.Color>FromKnownColor <System.Drawing.KnownColor>color .[static]<System.Drawing.Color>FromName <System.String>name .<System.Single>GetBrightness() .<System.Int32>GetHashCode() .<System.Single>GetHue() .<System.Single>GetSaturation() .<System.Type>GetType() .[static]<System.Boolean>ReferenceEquals <System.Object>objA <System.Object>objB .<System.Int32>ToArgb() .<System.Drawing.KnownColor>ToKnownColor() .<System.String>ToString() true

As you can see, the .FromARGB() method allows us to provide Red, Green and Blue values and it will construct a DotNet color value for us:

test.f1.forecolor = test.f1.backcolor.FromArgb 255 255 100
test.f1.backcolor = test.f1.backcolor.FromArgb 100 200 234
dotNetObject:System.Drawing.Color

See Also