|
|

开发背景:
有人曾经要我开发一个根据不同选择而显示不同颜色的管理工具。我开始考虑利用下拉框来实现条目背景及显示颜色根据条目名称不同而进行变化,根据这个思路我在网上搜了半天也没有找到任何相关的解决方案,最后我想到了一个比当初需求要复杂的方案(包括数据库),所以我尝试着找到一个更简单的实现方案。
该文主要是演示如何读取系统颜色并在下拉框中的每个条目中显示对应的颜色,该源码主要展示以下内容:
1、如何获得System.Drawing.KnownColor颜色控件的列表枚举
2、如何排除系统环境颜色,如“Active Border”
3、如何分配颜色到下拉框的每个条目
代码详解:
命名下拉框为ddlMultiColor 来显示颜色名称及颜色,用<div>标签显示右侧矩形结果,Aspx代码如下-
-
-
- <asp:DropDownList ID ="ddlMultiColor"
- OnSelectedIndexChanged="ddlMultiColor_OnSelectedIndexChanged"
- runat="server" AutoPostBack="true">
-
-
-
-
-
-
-
-
复制代码 在cs文件中我们需要引用以下命名空间:- using System;
- using System.Web;
- using System.Reflection;
- using System.Drawing;
- using System.Collections.Generic;
复制代码 我们先看一下Page_Load事件,在Page_Load中我们对选中的下拉列表进行处理显示- protected void Page_Load(object sender, EventArgs e)
- {
- if (Page.IsPostBack == false)
- {
- populateDdlMultiColor(); //51aspx.com
- colorManipulation();
- }
- }
复制代码 现在让我们来看一下populateDdlMultiColor() 函数- private void populateDdlMultiColor()
- {
- ddlMultiColor.DataSource = finalColorList();
- ddlMultiColor.DataBind(); //liudao 翻译
- }
-
- finalColorList()方法
- private List 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 finalColorList = new List();
-
- foreach (string color in allColors)
- {
- if (Array.IndexOf(systemEnvironmentColors, color) < 0)
- {
- finalColorList.Add(color);
- }
- }
- return finalColorList;
- }
复制代码 |
|