Click here to Skip to main content
15,886,049 members
Articles / Multimedia / GDI+
Article

Simple Web and RGB Color Picker Utility

Rate me:
Please Sign up or sign in to vote.
3.70/5 (10 votes)
11 Oct 20065 min read 52.4K   585   19   2
The article addresses the construction of a simple utility application useful for selecting an RGB or web color.

Introduction

The article addresses the construction of a simple utility application useful for selecting an RGB or web color; the application allows the user to key in RGB values or use RGB slider controls to select a color. Whenever the current color is updated, the text boxes at the bottom of the form are dynamically updated to show the current web and RGB color values set for the current color.

The text box values may be copied and pasted into a working project to set color values to match those selected in the utility. Further, if the RGB value is known, keying in a specific RGB value will display the web color equivalent value so to that end, the application will provide a translation from the RGB format to the web color format.

Image 1

Figure 1: Simple Color Picker Application

Getting Started

Unzip the attached file; in it you will find solution containing a Windows Forms project with a single form class. The application is entirely contained in the single form (as shown in Figure 1). The application was written in Visual Basic 2005 and requires the 2005 IDE to open it.

Image 2

Figure 2. RGB/Web Color Picker Application in the Solution Explorer

The Code

Again, this is a very simple project and all of the code is contained in the single form class. The form class does not contain any Imports statements. In the first section of the code, a Declarations region is defined and a few form variables are declared within that section:

VB
Public Class frmColorPicker

#Region "Declarations"
     Private mRed As Integer
    Private mGreen As Integer
    Private mBlue As Integer

#End Region

The form level variables are used to keep track of the RGB color values; they were declared to have form level scope since nearly all of the subroutines in this class manipulate or read the current state of each of those variables.

The form load event handler is used to establish the default color shown in a panel control added to the form and used to display the current color. This value is set by updating each of the RGB related variables to contain a value of zero, and then setting the panel’s back color to the RGB value of 0, 0, 0 through the use of the System.Drawing.Color.FromArgb function. This function will also handle an alpha value but this value is ignored for the purposes of this utility. After setting the panel color, the subroutine wraps up by setting the text in the Web Color and RGB color text boxes.

VB
Private Sub frmColorPicker_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load

    mRed = 0
    mGreen = 0
    mBlue = 0
    pnlColor.BackColor = System.Drawing.Color.FromArgb(mRed, mGreen, mBlue)
    txtWebColor.Text = GetWebColor()
    txtRGB.Text = "RGB(" & mRed & ", " & mGreen & ", " & mBlue & ")"

End Sub

Following the form load event handler, each of the three scroll bars used to control the red, green, and blue values are provided with a handler for the scroll event. Each of the handlers is the same so I will only describe the scroll event handler associated with the red value:

VB
Private Sub tbarRed_Scroll(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles tbarRed.Scroll

    txtRed.Text = tbarRed.Value
    mRed = tbarRed.Value
    pnlColor.BackColor = System.Drawing.Color.FromArgb(mRed, mGreen, mBlue)
    txtWebColor.Text = GetWebColor()
    txtRGB.Text = "RGB(" & mRed & ", " & mGreen & ", " & mBlue & ")"

End Sub

The code is pretty straight forward; all that happens here is that the text box used to display the current red value is updated to match the current scroll bar value (the scrollbars are set to default to 0 and have a maximum value of 255). The local member variable, mRed is set to match the scroll bar value and the panel back color is updated to display the current RGB value after the scroll bar is used to update the red value. Lastly, the web color and the RGB text boxes are updated to show the current RGB and web color values. The web color is set to display the string representation of the current color converted to HTML format within a function called “GetWebColor”.

Each of the three text boxes used to show the current red, green, and blue values have two event handlers configured to support them. The first is used to limit user responses to permit the user to only enter numbers or to use the backspace key; that code is as follows (as each of the text boxes use the same code, I will only show the code associated with the red color value text box):

VB
Private Sub txtRed_KeyPress(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.KeyPressEventArgs) _
        Handles txtRed.KeyPress

    If Char.IsNumber(e.KeyChar) Or e.KeyChar = ControlChars.Back Then
        'ok, its a number so let it go
    Else
        e.KeyChar = Nothing
    End If

End Sub

As you can see, this code intercepts and processes the key strokes associated with the text box through the key press event. The code checks to see if the value entered is numeric or is the backspace key, if the key press meets the criteria it is permitted, else, the key press is ignored by setting the key character to nothing.

The second event handler associated with each text box is used to update the form if the user changes the textbox to contain a valid integer value.

VB
Private Sub txtRed_TextChanged(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles txtRed.TextChanged

    Try
        If (Convert.ToInt32(txtRed.Text) >= 0 And 
     Convert.ToInt32(txtRed.Text) <= 255) Then
            tbarRed.Value = Convert.ToInt32(txtRed.Text)
            mRed = tbarRed.Value
            pnlColor.BackColor = System.Drawing.Color.FromArgb(mRed, 
     mGreen, mBlue)
            txtWebColor.Text = GetWebColor()
            txtRGB.Text = "RGB(" & mRed & ", " & mGreen & ", " & mBlue & ")"
        Else
            ' input last valid number
            txtRed.Text = mRed.ToString()
        End If
    Catch ex As Exception
        'do nothing
    End Try

End Sub

This code is used to confirm the new text value is between 0 and 255 and, if it is, it sets the scroll bar, panel back color, member variables, and text boxes to show the newly updated color value. If an invalid number is submitted, the last valid number is restored and no changes are made. Again, there are three of these handlers in the project but, since they are nearly the same, I am only showing one of them in this document.

The GetWebColor function is used to convert the current RGB value into an HTML compatible color; that code is as follows:

VB
Private Function GetWebColor() As String

    Dim clr As Color
    clr = Color.FromArgb(mRed, mGreen, mBlue)

    Dim wc As String = ColorTranslator.ToHtml(clr).ToString()
    Return wc

End Function

The GetWebColor function defines the current color using the RGB form wide variable content and then passes that color to the ColorTranslator.ToHtml function which in turn returns the web color as a string.

The only other function remaining in the class is used to handle the Exit button’s Click event; this event handler merely calls the Application.Exit method to terminate the application.

Summary

This application is again very simple yet it may still be of some use to persons generating styles for a web site, seeking to convert RGB values to their web counterparts, or as a tool to manipulate and define RGB colors for desktop application styling.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Software Developer (Senior)
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Generalgood to great! Pin
duwke18-Oct-06 4:11
duwke18-Oct-06 4:11 
GeneralRe: good to great! Pin
Geir Danielsen19-Oct-06 19:36
Geir Danielsen19-Oct-06 19:36 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.