Home > Articles > Programming > User Interface (UI)

This chapter is from the book

Color in the .NET Framework

As you'd expect, color is represented by an object in the .NET Framework; in this case, a structure rather than a class, the Color structure in the System.Drawing namespace.

The Color structure is supported by the KnownColor enumeration and the SystemColor and ColorTranslator classes, all also part of System.Drawing.

The Color Structure

The Color structure exposes three static methods that function as pseudo-constructors, as shown in Table 4-1.

Table 4-1. Color Pseudo-Constructors

Method

Description

FromArgb

Creates a Color structure from its ARGB component values

FromKnownColor

Creates a Color structure representing the specified member of the KnownColor enumeration

FromName

Creates a Color structure representing the member of the KnownColor enumeration specified its name (passed as a String)

The FromArgb method is overloaded, exposing four different versions that allow you to specify various combinations of the ARGB component values. The FromKnownColor and FromName versions create a Color structure based on the KnownColor enumeration.

As shown in Listing 4-1, you pass the enumeration member directly to the FromKnownColor method, and the name of the color, as a string, to the FromName method.

Example 4-1. Two methods for creating a Color structure based on the KnownColor enumeration

Dim clrEnum As Color, clrName As Color
clrEnum = Color.FromKnownColor(KnownColor.Beige)
clrName = Color.FromName("Beige")

In addition to the pseudo-constructors, the Color structure exposes five methods that are useful for translating between various color models, as shown in Table 4-2.

Table 4-2. Color Structure Translation Methods

Method

Description

GetHue

Returns the HSB hue in degrees

GetSaturation

Returns the HSB saturation percentage as a value between 0 and 1

GetBrightness

Returns the HSB brightness percentage as a value between 0 and 1

ToArgb

Returns the 32-bit ARGB value representing the color

ToKnownColor

Returns a member of the KnownColor enumeration if one was used to create the color; otherwise, returns zero

You can't create a Color directly from the HSB model in the .NET Framework, although as we'll see, the Visual Studio color picker allows it.

In addition to its methods, the Color structure exposes two sets of properties. The first set, shown in Table 4-3, provides information regarding the Color.

Table 4-3. Color Structure Properties

Properties

Description

A

Alpha component value

R

Red component value

G

Green component value

B

Blue component value

IsKnownColor

Indicates whether the color was created from the KnownColor enumeration

IsNamedColor

Indicates whether the color was created from the KnownColor enumeration

IsSystemColor

Indicates whether the color was created from one of the first 26 members of the KnownColor enumeration

Name

The name of a known color

The A, R, G, and B properties should be self-explanatory, as should the Name property.

The IsKnownColor and IsNamedColor properties, which always return the same value, indicate whether the Color structure was created from a KnownColor using either the FromKnownColor or FromName method. These properties will not return true if the ARGB value of a Color happens to match that of a member of the KnownColor enumeration—they don't perform a search or compare ARGB values.

The IsSystemColor property indicates whether the Color is one of the colors set by the user in the control panel. As we'll see in the next section, SystemColors are represented by the first 26 members of the KnownColor enumeration.

The sample program for this chapter includes a form that displays each of these properties for the KnownColors.

The other set of Color properties match the values of the KnownColor enumeration. These static properties allow you to quickly create an instance of one of the known colors.

Listing 4-2, a reprise of Listing 4-1, uses the static Beige property to create a third instance of the Color structure.

Example 4-2. Using a static property to obtain an instance of a Color structure

Dim clrEnum As Color, clrName As Color, clrStatic as Color

clrEnum = Color.FromKnownColor(KnownColor.Beige)
clrName = Color.FromName("Beige")
clrStatic = Color.Beige

Known and System Colors

The .NET Framework supports a set of 140 standard colors through its KnownColor enumeration (and the related static properties of the Color structure).

These colors, which are listed in Table 4-4, were proposed, but not included, in the CSS standard, although they do not coincide with the so-called Web Safe color range. Despite this, they do represent a de facto HTML standard, and they're supported by recent versions of both of the two main browsers, Internet Explorer and Netscape Navigator.

Table 4-4. The KnownColor Enumeration

AliceBlue

DarkSlateGray

LightSalmon

PaleVioletRed

AntiqueWhite

DarkTurquoise

LightSeaGreen

PapayaWhip

Aqua

DarkViolet

LightSkyBlue

PeachPuff

Aquamarine

DeepPink

LightSlateGray

Peru

Azure

DeepSkyBlue

LightSteelBlue

Pink

Beige

DimGray

LightYellow

Plum

Bisque

DodgerBlue

Lime

PowderBlue

Black

Firebrick

LimeGreen

Purple

BlanchedAlmond

FloralWhite

Linen

Red

Blue

ForestGreen

Magenta

RosyBrown

BlueViolet

Fuschia

Maroon

RoyalBlue

Brown

Gainsboro

MediumAquamarine

SaddleBrown

BurlyWood

GhostWhite

MediumBlue

Salmon

CadetBrown

Gold

MediumOrchid

SandyBrown

Chartreuse

Goldenrod

MediumPurple

SeaGreen

Chocolate

Gray

MediumSeaGreen

SeaShell

Coral

Green

MediumSlateBlue

Sienna

CornflowerBlue

GreenYellow

MediumSpringGreen

Silver

Cornsilk

Honeydew

MediumTurquoise

SkyBlue

Crimson

HotPink

MediumVioletRed

SlateGray

Cyan

IndianRed

MidnightBlue

Snow

DarkBlue

Indigo

MintCream

SpringGreen

DarkCyan

Ivory

MistyRose

SteelBlue

DarkGoldenrod

Khaki

Moccasin

Tan

DarkGrey

Lavender

NavajoWhite

Teal

DarkGreen

LavenderBlush

Navy

Thistle

DarkKhaki

LawnGreen

OldLace

Tomato

DarkMagenta

LemonChiffon

Olive

Transparent

DarkOliveGreen

LightBlue

OliveDrab

Turquoise

DarkOrange

LightCoral

Orange

Violet

DarkOrchid

LightCyan

OrangeRed

Wheat

DarkRed

LightGoldenrodYellow

Orchid

White

DarkSalmon

LightGray

PaleGoldenRod

WhiteSmoke

DarkSeaGreen

LightGreen

PaleGreen

Yellow

DarkSlateBlue

LightPink

PaleTurquoise

YellowGreen

While it must be said that some of these colors are spectacularly ugly, the .NET Framework does make them easy to access. For example, Listing 4-3, excerpted from the chapter's example program, demonstrates how to read the names of the KnownColor enumeration into an array, and then display that list in a ListBox control.

Example 4-3. Reading the names of the KnownColor enumeration into an array

Dim theNamedColors() as String

theNamedColors = System.Enum.GetNames(GetType(KnownColor))

Me.theListBox.Items.AddRange(theNamedColors)

The KnownColor enumeration also includes 26 colors (in positions 0 to 25) that correspond to the static properties of the SystemColors class, shown in Table 4-5.

Table 4-5. SystemColors Properties

Property

Description

ActiveBorder

The color of the active window's border

ActiveCaption

The color of the background of the active window's title bar

ActiveCaptionText

The color of the text in the active window's title bar

AppWorkspace

The color of the background of the application workspace (the area in a MDI view that is not occupied by documents)

Control

The color of the face color of a 3-D element

ControlDark

The color of the shadow color of a 3-D element

ControlDarkDark

The color of the dark shadow color of a 3-D element

ControlLight

The color of the light color of a 3-D element

ControlLightLight

The color of the lightest color of a 3-D element

ControlText

The color of the text in a 3-D element

Desktop

The color of the operating system desktop

GrayText

The color of dimmed (disabled) text

Highlight

The color of the background of selected items

HighlightText

The color of the text of selected items

HotTrack

The color used to designate a hot track item (hot track items are activated by a single click)

InactiveBorder

The color of an inactive window's border

InactiveCaption

The color of the background of an inactive window's title bar

InactiveCaptionText

The color of the text of an inactive window's title bar

Info

The color of the background of a ToolTip

InfoText

The color of the text of a ToolTip

Menu

The color of a menu's background

MenuText

The color of the text of a menu

Window

The color of the background of the client area of a window

WindowFrame

The color of the window frame

WindowText

The color of the text in the client area of a window

Like SystemPens and SystemBrushes, the System Colors class represents the ambient properties set by the user in the control panel.

Other Supporting Classes

Two additional .NET Framework classes are of use when working with color: the ColorTranslator class and the ControlPaint class.

The ColorTranslator class does exactly what you might expect. It provides methods to translate a .NET Framework Color structure to an HTML color, an OLE color, or a Win32 color, and back, as shown in Table 4-6.

Table 4-6. ColorTranslator Methods

Method

Description

FromHtml

Creates a Color structure from an HTML color

FromOle

Creates a Color structure from an OLE color value

FromWin32

Creates a Color structure from a Win32 color value

ToHtml

Translates a Color structure into an HTML color string

ToOle

Translates a Color structure into an OLE color value

ToWin32

Translates a Color structure into a Win32 color value

The ToHtml method is particularly useful when combined with a SystemColor. Instead of returning the color name, it returns the CSS name of the System element.

Finally, the ControlPaint class, which we examined in Chapter 2, .NET Graphic Objects, provides four methods for manipulating the value of a color, as shown in Table 4-7.

Table 4-7. ControlPaint Color Methods

Method

Description

Dark

Returns ControlDark if the color is a SystemColor; otherwise, creates a new, darker version of the specified color

DarkDark

Returns ControlDarkDark if the color is a SystemColor; otherwise, returns a new, darker version of the specified color

Light

Returns ControlLight if the color is a SystemColor; otherwise, returns a new, lighter version of the specified color

LightLight

Returns ControlLightLight if the color is a SystemColor; otherwise, returns a new, lighter version of the specified color

These four methods can be used to easily create a set of colors for drawing three-dimensional objects, provided the base color isn't one of the SystemColors.

The Dark and Light methods optionally allow you specify a percentage value that indicates the amount by which the value is to change. Using this capability, you can create an entire suite of shaded (or tinted) hues with which to achieve some very sophisticated effects.

In the next chapter, the last in Part I, we'll examine the classes that the .NET Framework provides for manipulating images.

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.

Overview


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information


To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.

Surveys

Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.

Newsletters

If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information


Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.

Security


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.

Children


This site is not directed to children under the age of 13.

Marketing


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information


If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.

Choice/Opt-out


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information


Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents


California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure


Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.

Links


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact


Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice


We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020