65.9K
CodeProject 正在变化。 阅读更多。
Home

简单的 Web 和 RGB 颜色选择器实用程序

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.70/5 (10投票s)

2006年10月11日

5分钟阅读

viewsIcon

53225

downloadIcon

591

本文介绍了一个用于选择 RGB 或网页颜色的简单实用工具的构建。

引言

本文介绍了一个用于选择 RGB 或网页颜色的简单实用工具的构建;该应用程序允许用户输入 RGB 值或使用 RGB 滑块控件来选择颜色。每当当前颜色更新时,窗体底部的文本框都会动态更新,以显示当前颜色设置的网页和 RGB 颜色值。

文本框中的值可以复制并粘贴到正在工作的项目中,以匹配在实用工具中选择的颜色值。此外,如果已知 RGB 值,输入特定的 RGB 值将显示相应的网页颜色值,因此,该应用程序将提供从 RGB 格式到网页颜色格式的转换。

图 1:简单的颜色选择器应用程序

入门

解压附件文件;在其中,您将找到一个包含单个窗体类的 Windows Forms 项目的解决方案。该应用程序完全包含在一个窗体中(如图 1 所示)。该应用程序是用 Visual Basic 2005 编写的,需要 2005 IDE 才能打开它。

图 2。解决方案资源管理器中的 RGB/网页颜色选择器应用程序

代码

同样,这是一个非常简单的项目,所有的代码都包含在单个窗体类中。窗体类不包含任何 Imports 语句。在代码的第一部分,定义了一个 Declarations 区域,并在该区域内声明了一些窗体变量。

Public Class frmColorPicker

#Region "Declarations"

    Private mRed As Integer
    Private mGreen As Integer
    Private mBlue As Integer

#End Region

窗体级变量用于跟踪 RGB 颜色值;它们被声明为具有窗体级作用域,因为该类中几乎所有的子例程都会操作或读取这些变量的当前状态。

窗体加载事件处理程序用于设置添加到窗体并用于显示当前颜色的面板控件中显示的默认颜色。此值通过将每个 RGB 相关变量更新为零,然后使用 System.Drawing.Color.FromArgb 函数将面板的背景颜色设置为 RGB 值 0、0、0 来设置。此函数还将处理 alpha 值,但为了本实用工具的目的,该值将被忽略。设置面板颜色后,子例程通过设置 Web Color 和 RGB 颜色文本框中的文本来完成。

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

在窗体加载事件处理程序之后,用于控制红色、绿色和蓝色值的三个滚动条都提供了滚动事件的处理程序。每个处理程序都是相同的,因此我将仅描述与红色值关联的滚动事件处理程序。

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

代码非常直接;这里发生的所有事情是用于显示当前红色值的文本框被更新以匹配当前的滚动条值(滚动条默认设置为 0,最大值为 255)。局部成员变量 mRed 被设置为匹配滚动条值,在滚动条用于更新红色值后,面板背景颜色被更新以显示当前的 RGB 值。最后,网页颜色和 RGB 文本框被更新以显示当前的 RGB 和网页颜色值。网页颜色设置为通过一个名为“GetWebColor”的函数显示当前颜色转换为 HTML 格式的字符串表示形式。

用于显示当前红色、绿色和蓝色值的三个文本框中的每一个都有两个配置的事件处理程序来支持它们。第一个用于限制用户响应,允许用户仅输入数字或使用退格键;代码如下(因为每个文本框都使用相同的代码,我将仅显示与红色值文本框相关的代码)。

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

正如您所看到的,此代码通过按键事件拦截并处理与文本框关联的按键。代码会检查输入的值是否为数字或是否为退格键,如果按键符合标准则允许,否则,通过将字符设置为空来忽略按键。

与每个文本框关联的第二个事件处理程序用于在用户将文本框更改为包含有效整数值时更新窗体。

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

此代码用于确认新的文本值在 0 到 255 之间,如果在此范围内,则设置滚动条、面板背景颜色、成员变量和文本框以显示新更新的颜色值。如果提交了无效的数字,则会恢复上一个有效数字,并且不会进行任何更改。再次,项目中有三个这样的处理程序,但由于它们几乎相同,我仅在此文档中展示其中一个。

GetWebColor 函数用于将当前的 RGB 值转换为 HTML 兼容的颜色;代码如下。

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

GetWebColor 函数使用 RGB 窗体范围变量内容定义当前颜色,然后将该颜色传递给 ColorTranslator.ToHtml 函数,该函数反过来将网页颜色作为字符串返回。

类中剩下的唯一一个函数用于处理“退出”按钮的 Click 事件;此事件处理程序仅调用 Application.Exit 方法来终止应用程序。

摘要

这个应用程序仍然非常简单,但对于生成网站样式、寻求将 RGB 值转换为其网页对应项,或作为用于桌面应用程序样式的 RGB 颜色操作和定义工具的人来说,可能仍有一定的用处。

© . All rights reserved.