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

ASP.NET 颜色选择器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.17/5 (9投票s)

2006年7月12日

CPOL

1分钟阅读

viewsIcon

101850

downloadIcon

427

一个用于选择网页安全颜色的 Web 控制。

Sample Image - ColorPickerNET.gif

引言

在一个最近的项目中,我需要一个 ASP.NET 颜色选择器。我创建了一个 ASP.NET 2.0 WebControl,它渲染一些 HTML、CSS 和 JavaScript。不需要包含任何外部文件或库。

Using the Code

解压缩 zip 文件并在 Visual Studio 2005 中打开解决方案。运行测试页面 (default.aspx)。

颜色选择器是一个包含许多单元格的表格,这些单元格具有(网页安全)背景颜色。

colorpickerdiv += "<div id=\"colorpicker\">";
colorpickerdiv += "     <table cellpadding=\"0\" cellspacing=\"0\" " + 
                  "onclick=\"javascript:ColorPickerOnColorClick(event);\">";
string[] websafecolorlist = {"FFFFFF","CCCCCC","999999","666666","333333", 
        "000000","FFCC00","FF9900","FF6600","FF3300","FFFFFF",
        "FFFFFF","FFFFFF","FFFFFF","FFFFFF","FFFFFF","99CC00",
        "FFFFFF","FFFFFF","FFFFFF","FFFFFF","CC9900","FFCC33",
        "FFCC66","FF9966","FF6633","CC3300","FFFFFF","FFFFFF",
        "FFFFFF","FFFFFF","CC0033","CCFF00","CCFF33","333300",
        "666600","999900","CCCC00","FFFF00","CC9933","CC6633",
        "330000","660000","990000","CC0000","FF0000","FF3366",
        "FF0033","99FF00","CCFF66","99CC33","666633","999933",
        "CCCC33","FFFF33","996600","996600","663333","993333",
        "CC3333","FF3333","CC3366","FF6699","FF0066","66FF00",
        "99FF66","66CC33","669900","999966","CCCC66","FFFF66",
        "996633","663300","996666","CC6666","FF6666","990033",
        "CC3399","FF66CC","FF0099","33FF00","66FF33","339900",
        "66CC00","99FF33","CCCC99","FFFF99","CC9966","CC6600",
        "CC9999","FF9999","FF3399","CC0066","990066","FF33CC",
        "FF00CC","00CC00","33CC00","336600","669933","99CC66",
        "CCFF99","FFFFCC","FFCC99","FF9933","FFCCCC","FF99CC",
        "CC6699","993366","660033","CC0099","330033","33CC33",
        "66CC66","00FF00","33FF33","66FF66","99FF99","CCFFCC",
        "FFFFFF","FFFFFF","FFFFFF","CC99CC","996699","993399",
        "990099","663366","660066","006600","336633","009900",
        "339933","669966","99CC99","FFFFFF","FFFFFF","FFFFFF",
        "FFCCFF","FF99FF","FF66FF","FF33FF","FF00FF","CC66CC",
        "CC33CC","003300","00CC33","006633","339966","66CC99",
        "99FFCC","CCFFFF","3399FF","99CCFF","CCCCFF","CC99FF",
        "9966CC","663399","330066","9900CC","CC00CC","00FF33",
        "33FF66","009933","00CC66","33FF99","99FFFF","99CCCC",
        "0066CC","6699CC","9999FF","9999CC","9933FF","6600CC",
        "660099","CC33FF","CC00FF","00FF66","66FF99","33CC66",
        "009966","66FFFF","66CCCC","669999","003366","336699",
        "6666FF","6666CC","666699","330099","9933CC","CC66FF",
        "9900FF","00FF99","66FFCC","33CC99","33FFFF","33CCCC",
        "339999","336666","006699","003399","3333FF","3333CC",
        "333399","333366","6633CC","9966FF","6600FF","00FFCC",
        "33FFCC","00FFFF","00CCCC","009999","006666","003333",
        "3399CC","3366CC","0000FF","0000CC","000099","000066",
        "000033","6633FF","3300FF","00CC99","FFFFFF","FFFFFF",
        "FFFFFF","FFFFFF","0099CC","33CCFF","66CCFF","6699FF",
        "3366FF","0033CC","FFFFFF","FFFFFF","FFFFFF","FFFFFF",
        "3300CC","FFFFFF","FFFFFF","FFFFFF","FFFFFF","FFFFFF",
        "FFFFFF","00CCFF","0099FF","0066FF","0033FF","FFFFFF",
        "FFFFFF","FFFFFF","FFFFFF","FFFFFF"};

int rowcounter = 0;
bool needrowstart = true;
for (int i = 0; i < websafecolorlist.Length; i ++)
{
    if (needrowstart)
    {
        needrowstart = false;
        colorpickerdiv += "            <tr> ";
    }
    string color = "#" + websafecolorlist[i];
    colorpickerdiv += "                <td style=\"background-color:" + 
                      color + "\"></td>";
    if (rowcounter++ == 16)
    {
        colorpickerdiv += "            </tr>";
        needrowstart = true;
        rowcounter = 0;
    }
}
colorpickerdiv += "     </table>";
colorpickerdiv += "</div>";

if (!Page.ClientScript.IsClientScriptBlockRegistered("colorpickerdiv"))
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), 
                      "colorpickerdiv", colorpickerdiv);

上面的代码有点冗余,可以简化,但颜色的数组组合在一起形成了一张不错的图像。该表格被一个不可见的 div 包围。当以下代码被触发时,表格将可见

opendialogscript += "    var ActiveColorPicker;\n";
opendialogscript += "    function OpenColorPicker(id)\n";
opendialogscript += "    {\n";
opendialogscript += "        ActiveColorPicker=id; \n";
opendialogscript += "        var colorpickerdiv=document." + 
                    "getElementById('colorpicker');\n";
opendialogscript += "        colorpickerdiv.style.visibility='visible';\n";
opendialogscript += "        colorpickerdiv.style.left=ActiveColorPicker" + 
                    ".style.left+ActiveColorPicker.style.width;\n";
opendialogscript += "        colorpickerdiv.style.top=window.event.y;\n";
opendialogscript += "        colorpickerdiv.style.left=window.event.x;\n";
opendialogscript += "    }\n";

并在点击颜色后隐藏

opendialogscript += "    function ColorPickerOnColorClick(e)\n";
opendialogscript += "    {\n";
opendialogscript += "        var td = (e.target) ? e.target : e.srcElement; \n";
opendialogscript += "        var color=td.style.backgroundColor; \n";
opendialogscript += "        ActiveColorPicker.style.backgroundColor=color;\n";
opendialogscript += "        ActiveColorPicker.style.color=color;\n";
opendialogscript += "        ActiveColorPicker.value=color;\n";
opendialogscript += "        var colorpickerdiv=document.getElementById('colorpicker');\n";
opendialogscript += "        colorpickerdiv.style.visibility='hidden';\n";
opendialogscript += "    }\n";

以下代码用于渲染一个可点击的矩形。控件的 ID 使用 this.UniqueID 渲染。为了存储颜色值,我使用文本框的 value 属性。

protected override void Render(HtmlTextWriter output)
{
    string html = "";
    string onclicker="onclick=\"javascript:OpenColorPicker(" + 
                     this.UniqueID + ");\"";
    html += "<input style=\"background-color:" + 
            SelectedHexValue + ";color:" + SelectedHexValue + 
            ";\" class=\"colorpickerbutton\" " + 
            onclicker + " readonly=\"true\" class=\"lookupmo" + 
            "dalvalue\" type=\"text\" name=\"" + 
            this.UniqueID + "\" value=\"" + 
            SelectedHexValue + "\">";
    output.Write(html);
}

在发布回发后检索值是在 LoadPostData 中完成的

public bool LoadPostData(String postDataKey, NameValueCollection values)
{
    SelectedHexValue = values[this.UniqueID];
    return false;
}

可以使用 SelectedHexValue 属性获取或设置颜色代码。如果您需要一个 Color 对象或 RGB int,只需添加将 HEX 代码转换的属性即可。

Label1.Text = ColorPicker1.SelectedHexValue;

关注点

关于 Web 控件:LoadPostData 是一个棘手的事件。为了使其触发,您必须将其中一个 HTML 控件命名为与控件的 UniqueID 完全相同!

如果您对代码有任何意见,请随时通过以下方式给我发送电子邮件:colorpicker@toverstudio.nl。

历史

  • 2006-07-11:发布 1.0。
© . All rights reserved.