查看: 10595|回复: 1
打印 上一主题 下一主题

如何在Asp.net中实现多彩下拉框

[复制链接]
跳转到指定楼层
1#
发表于 2007-9-16 12:57:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
台州网址导航
开发背景:
   有人曾经要我开发一个根据不同选择而显示不同颜色的管理工具。我开始考虑利用下拉框来实现条目背景及显示颜色根据条目名称不同而进行变化,根据这个思路我在网上搜了半天也没有找到任何相关的解决方案,最后我想到了一个比当初需求要复杂的方案(包括数据库),所以我尝试着找到一个更简单的实现方案。
   
   该文主要是演示如何读取系统颜色并在下拉框中的每个条目中显示对应的颜色,该源码主要展示以下内容:
   1、如何获得System.Drawing.KnownColor颜色控件的列表枚举
   2、如何排除系统环境颜色,如“Active Border”
   3、如何分配颜色到下拉框的每个条目
   
  代码详解:
   命名下拉框为ddlMultiColor 来显示颜色名称及颜色,用<div>标签显示右侧矩形结果,Aspx代码如下
  1.    
  2.    
  3.    
  4.    <asp:DropDownList ID ="ddlMultiColor"
  5.    OnSelectedIndexChanged="ddlMultiColor_OnSelectedIndexChanged"
  6.    runat="server" AutoPostBack="true">
  7.    
  8.    
  9.    
  10.    
  11.    
  12.    
  13.    
  14.    
复制代码
在cs文件中我们需要引用以下命名空间:
  1.   using System;
  2.   using System.Web;
  3.   using System.Reflection;
  4.   using System.Drawing;
  5.   using System.Collections.Generic;  
复制代码
我们先看一下Page_Load事件,在Page_Load中我们对选中的下拉列表进行处理显示
  1.   protected void Page_Load(object sender, EventArgs e)
  2.   {
  3.    if (Page.IsPostBack == false)
  4.    {
  5.    populateDdlMultiColor(); //51aspx.com
  6.    colorManipulation();
  7.    }
  8.   }  
复制代码
现在让我们来看一下populateDdlMultiColor() 函数
  1.   private void populateDdlMultiColor()
  2.   {
  3.    ddlMultiColor.DataSource = finalColorList();
  4.    ddlMultiColor.DataBind(); //liudao 翻译
  5.   }
  6.    
  7.    finalColorList()方法
  8.   private List finalColorList()
  9.   {
  10.    string[] allColors = Enum.GetNames(typeof(System.Drawing.KnownColor));
  11.    string[] systemEnvironmentColors =
  12.    new string[(
  13.    typeof(System.Drawing.SystemColors)).GetProperties().Length];
  14.    
  15.    int index = 0;
  16.    
  17.    foreach (MemberInfo member in (
  18.    typeof(System.Drawing.SystemColors)).GetProperties())
  19.    {
  20.    systemEnvironmentColors[index ++] = member.Name;
  21.    }
  22.    
  23.    List finalColorList = new List();
  24.    
  25.    foreach (string color in allColors)
  26.    {
  27.    if (Array.IndexOf(systemEnvironmentColors, color) < 0)
  28.    {
  29.    finalColorList.Add(color);
  30.    }
  31.    }
  32.    return finalColorList;
  33.   }  
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
2#
 楼主| 发表于 2007-9-16 12:57:31 | 只看该作者
台州网址导航
System.Drawing.KnownColor是Asp.net系统本身自带颜色,我已经通过枚举列出了这些颜色并通过 finalColorList()函授进行绑定。为了实现该功能,我使用了最基本的枚举特征之一:Enum.GetNames() 共享方法,该方法对枚举内容进行检测并输出结果为字符串序列,该字符串中每个值都对应枚举中的每个结果。
   然而,该方法还是有些问题的。按照上面的思路,枚举金额过中会包括系统环境颜色,比如“Active Border(注:活动边框)”,为了解决该问题,我扩展了系统环境颜色。我用了System.Reflection.MemberInfo类。
   这里我用System.Drawing.SystemColors属性填充systemEnvironmentColors ,然后创建一个名称为finalColorList 的图形列表,在finalColorList 中我只调用已知颜色,但是不在系统环境颜色中。然后把finalColorList绑定到ddlMultiColor中。至此,我们已经有了一个包括全部颜色名称的下拉框,下面让我们来操作一下:
  1.   private void colorManipulation()
  2.   {
  3.    int row;
  4.    for (row = 0; row < ddlMultiColor.Items.Count - 1; row++)
  5.    {
  6.    ddlMultiColor.Items[row].Attributes.Add("style",
  7.    "background-color:" + ddlMultiColor.Items[row].Value);
  8.    }
  9.    ddlMultiColor.BackColor =
  10.    Color.FromName(ddlMultiColor.SelectedItem.Text);
  11.   }  
复制代码
下拉框中的每一行背景颜色的Style]属性都与该行显示的颜色名称对应的。在OnSelectedIndexChanged 事件中下拉框中被选中的行通过下面的函数结合<div>标签进行高亮显示,同时右侧的矩形颜色也随之变化。
  1.   protected void ddlMultiColor_OnSelectedIndexChanged(object sender,
  2.    EventArgs e)
  3.   {
  4.    ddlMultiColor.BackColor = Color.FromName(ddlMultiColor.SelectedItem.Text);
  5.    colorManipulation();
  6.    ddlMultiColor.Items.FindByValue(ddlMultiColor.SelectedValue).Selected =
  7.    true;
  8.    msgColor.Attributes.Add("style", "background:" +
  9.    ddlMultiColor.SelectedItem.Value + ";width:30px;height:25px;");
  10.   }   
复制代码
至此,我们学会了如果获取System.Drawing并排出系统环境颜色,并绑定颜色名称到下拉列表。
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

网站推广
关于我们
  • 台州朗动科技(Tzweb.com)拥有多年开发网站平台系统门户手机客户端等业务的成功经验。主要从事:政企网站,系统平台,微信公众号,各类小程序,手机APP客户端,浙里办微应用,浙政钉微应用、主机域名、虚拟空间、后期维护等服务,满足不同企业公司的需求,是台州地区领先的网络技术服务商!

Hi,扫描关注我

Copyright © 2005-2026 站长论坛 All rights reserved

Powered by 站长论坛 with TZWEB Update Techonolgy Support

快速回复 返回顶部 返回列表