翻译:C#创建多颜色下拉列表框(Multi-color DropDownList using C#)
2007-06-27 14:30
501 查看
简介
这篇文章示范如何读取系统颜色并用它们染色下拉列表框(译注:下拉列表框是指 System.Web.UI.WebControls.DropDownList)的每一行。此例演示:如何从 System.Drawing.KnownColor 枚举获取颜色名称列表
如何排除系统环境颜色,比如 "Active Border"
如何用颜色染色列表行
背景
有人要我做一个管理工具,在这个工具里,可以设置不同类型的约会,这些约会的颜色要唯一,并且管理员可以随时进行更改。我开始想到使用下拉列表框将颜色名称显示出来,同时设置每一行的背景色。我在网上很长时间都找不到合适的解决办法。后来我找到了一个方案,但是涉及到数据库,过于复杂了。因此我试着找一个简单点儿的办法。
使用代码
将一个下拉列表框命名为 ddlMultiColor,用它来显示颜色名称和颜色本身。将一个 <div> 标记的 id 设置为 msgColor,它将在一个矩形框显示中显示颜色。
<table>
<tr>
<td>
<asp:DropDownList ID ="ddlMultiColor"
OnSelectedIndexChanged="ddlMultiColor_OnSelectedIndexChanged"
runat="server" AutoPostBack="true">
</asp:DropDownList>
</td>
<td>
<div id="msgColor" runat="server">
</div>
</td>
</tr>
</table>
在服务端,需要导入这些命名空间
using System;
using System.Web;
using System.Reflection;
using System.Drawing;
using System.Collections.Generic;
先来看一下 Page.Load 事件。组装下拉列表框和颜色处理是在这里进行的。
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
populateDdlMultiColor();
colorManipulation();
}
}
来看一下 populateDdlMultiColor() 方法
private void populateDdlMultiColor()
{
ddlMultiColor.DataSource = finalColorList();
ddlMultiColor.DataBind();
}
这里是 finalColorList() 方法的代码
private List<string> finalColorList()
{
string[] allColors = Enum.GetNames(typeof(System.Drawing.KnownColor));
string[] systemEnvironmentColors = new string[(typeof(System.Drawing.SystemColors)).GetProperties().Length];
int index = 0;
foreach (MemberInfo member in (typeof(System.Drawing.SystemColors)).GetProperties())
{
systemEnvironmentColors[index ++] = member.Name;
}
List<string> finalColorList = new List<string>();
foreach (string color in allColors)
{
if (Array.IndexOf(systemEnvironmentColors, color) < 0)
{
finalColorList.Add(color);
}
}
return finalColorList;
}
System.Drawing.KnownColor 是已知道系统颜色的枚举。我们已经用这些系统颜色填充了 allColors 数组。为了实现这一目标,要用到枚举最基本的特性:Enum.GetNames() 静态方法。这个方法检查枚举并提供一个字符串数组,数组中的每个字符串与枚举中的一个值对应。
但是,还有一个问题,系统环境颜色 -- 例如 "Active Border" -- 也包含在数组中。为了解决这个问题,我们提取出系统环境颜色。这里用到了 System.Reflection.MemberInfo 类,这个类可以获取成员属性(attribute) 信息,并提供对成员元数据的访问。
这里使用 System.Drawing.SystemColors 的属性填充 systemEnvironmentColors 数组。然后创建一个泛型列表,finalColorList,把已知道颜色添加进去,但将系统环境颜色排除在外。稍后,finalColorList 列表将被绑定到 ddlMultiColor。到这里,下拉列表框里已经包含了颜色名称,下面我们来处理这些颜色。
private void colorManipulation()
{
int row;
for (row = 0; row < ddlMultiColor.Items.Count - 1; row++)
{
ddlMultiColor.Items[row].Attributes.Add("style",
"background-color:" + ddlMultiColor.Items[row].Value);
}
ddlMultiColor.BackColor =
Color.FromName(ddlMultiColor.SelectedItem.Text);
}
我们为下拉列表的每一行添加 style 属性(attribute),用行包含的颜色名称设置 background-color。并用选中的颜色设置下拉列表框本身的背景色。在下拉列表框的 OnSelectedIndexChanged 事件中,以下代码将选中的颜色高亮标出,并且设置 msgColor (一个 <div> 标记),让它显示选中的颜色的矩形图像。
protected void ddlMultiColor_OnSelectedIndexChanged(object sender,
EventArgs e)
{
ddlMultiColor.BackColor = Color.FromName(ddlMultiColor.SelectedItem.Text);
colorManipulation();
ddlMultiColor.Items.FindByValue(ddlMultiColor.SelectedValue).Selected = true;
msgColor.Attributes.Add("style", "background:" +
ddlMultiColor.SelectedItem.Value + ";width:30px;height:25px;");
}
要点
现在,我们了解了如何从 System.Drawing 获取颜色,将系统环境颜色排除在外,将列表绑定到下拉列表框,也了解了如何按照颜色名称为每一行设置颜色。就是它!祝你编码愉快!
历史
24th June, 2007翻译说明:这篇文章是 codeproject 上的,作者Fuad Bin Omar,原文地址:http://www.codeproject.com/aspnet/csMultiColorDropDownList.asp,你可以在这里下载源代码。翻译的不好,请多批评。
相关文章推荐
- C#创建多颜色下拉列表框 VS.net2003 VS.net2005
- c# 设置属性的样式(颜色下拉Color)
- C# 实现颜色下拉列表框
- Jquery获取select,dropdownlist,checkbox下拉列表框的值
- [OpenPose翻译] Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields ∗原文翻译(注释版)
- 博为峰Java技术文章 ——JavaSE Swing使用数组和Vector创建下拉列表框
- Jquery获取select,dropdownlist,checkbox下拉列表框的值
- JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
- Jquery获取select,dropdownlist,checkbox下拉列表框的值
- 翻译预告Introduction to 3D Game Engine Design Using DirectX 9 and C#
- How to synchronize access to a shared resource in a multithreading environment by using Visual C#
- [翻译]使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
- 三原色光模式(RGB color model)的颜色融合,C#代码
- C#十六进制颜色与Color对象的互相转换
- 【自用】C# 字符串转颜色(如:#“FFFFFF” 转为 Color)
- Jquery获取select,dropdownlist,checkbox下拉列表框的值
- C#中为DataGrid添加下拉列表框
- C# 下拉列表框