翻译:Asp.net中多彩下拉框的实现

开发背景:
    有人曾经要我开发一个根据不同选择而显示不同颜色的管理工具。我开始考虑利用下拉框来实现条目背景及显示颜色根据条目名称不同而进行变化,根据这个思路我在网上搜了半天也没有找到任何相关的解决方案,最后我想到了一个比当初需求要复杂的方案(包括数据库),所以我尝试着找到一个更简单的实现方案。

    该文主要是演示如何读取系统颜色并在下拉框中的每个条目中显示对应的颜色,该源码主要展示以下内容:
    1、如何获得System.Drawing.KnownColor颜色控件的列表枚举
    2、如何排除系统环境颜色,如“Active Border”
    3、如何分配颜色到下拉框的每个条目


代码详解:
    命名下拉框为ddlMultiColor 来显示颜色名称及颜色,用<div>标签显示右侧矩形结果,Aspx代码如下

<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>

    在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;
}


    System.Drawing.KnownColor是Asp.net系统本身自带颜色,我已经通过枚举列出了这些颜色并通过finalColorList()函授进行绑定。为了实现该功能,我使用了最基本的枚举特征之一:Enum.GetNames() 共享方法,该方法对枚举内容进行检测并输出结果为字符串序列,该字符串中每个值都对应枚举中的每个结果。
    然而,该方法还是有些问题的。按照上面的思路,枚举金额过中会包括系统环境颜色,比如“Active Border(注:活动边框)”,为了解决该问题,我扩展了系统环境颜色。我用了System.Reflection.MemberInfo类。
    这里我用System.Drawing.SystemColors属性填充systemEnvironmentColors ,然后创建一个名称为finalColorList 的图形列表,在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);//liudao翻译
}

    下拉框中的每一行背景颜色的Style]属性都与该行显示的颜色名称对应的。在OnSelectedIndexChanged 事件中下拉框中被选中的行通过下面的函数结合<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并排出系统环境颜色,并绑定颜色名称到下拉列表。

   完整源码下载地址>>

   原作者:Fuad Bin Omar   翻译:liudao

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入react技术栈(8):事件系统

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号搜索前端小歌谣获取前端知识 1合成事件的绑定方式 2合成事件的实现机制 3在React中使用原生事件 4合成事件和原生事件混用 5对比react与原生事件 文章参考深入React技术栈

java mac jconsole_解决java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包问题

今天遇到了这样一种情况&#xff0c;自己的maven项目中并没有引用的jar包出现在了Maven Dependencies的依赖包中。而我在pom.xml自己没有没有引入啊.图示怀疑是自己的alibaba 的druid所依赖的包&#xff1a;com.alibabadruid1.0.14然后查看了它的相关依赖&#xff0c;果然找到了…

PyRun_SimpleString的无穷怨念

From: http://blog.csdn.net/ccat/article/details/544491 好吧&#xff0c;我承认我是个菜鸟&#xff0c;所以今天我勇敢的站出来接受大家的鄙视…… 话说早上同事喊我帮他改段程序&#xff0c;很简单&#xff0c;就是用PyRun_SimpleString函数执行一段Python脚本。错误也很直…

劳心者、劳力者或CEO、CTO各得其所,足矣

昨天在手机上看到了“清华学生借鉴百度技术自主研发手机框计算”的新闻&#xff0c;又是“计算”&#xff0c;很容易就与“云计算”联系起来了&#xff0c;挺有兴趣了解一下中国百度的“框计算”。毕竟我之前只是知道这么一个名词&#xff0c;没想到这么快就有了研发、应用&…

hdu 1754 I Hate It(线段树)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1754 I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 45334 Accepted Submission(s): 17789 Problem Description很多学校流行一种比…

java numa_Java只使用2个CPU中的1个和NUMA(Neo4J)

我正在研究一个java程序来创建一个非常大的Neo4J数据库.我使用batchinserter和Executors.newFixedThreadPool来加快速度.我的Win2012R2服务器有2个cpu(26核心26超线程)和256GB NUMA架构.我的问题是,我的导入器只使用1个CPU(节点).是否有可能只使用一个javaprocess的NUMA节点&am…

cisco 交换机vlan-trunk的配置详解及应用实例:

虚拟局域网&#xff08;vlan&#xff09;&#xff1a;主要是为了分割广播域注&#xff1a;不同vlan之间不能相互通信。trunk&#xff1a;主要是为了不同交换机的相同vlan相互通信配置静态VLAN的步骤:************************************1.创建VLAN1)VLAN数据库配置模式:Switc…

java 登录拦截器_springMVC 拦截器-用户登录拦截实战

各位小伙伴咱们继续学习新知识今天要分享的就是拦截器不知道小伙伴们平时上网的时候有没有注意到,尤其是上网购物的时候,不登录账号,就无法访问一些功能页面,比如你不登录账号,就没法查看购物车里面有什么物品.这就是拦截器起到的作用.那么今天我们就来给之前的项目添加一个拦截…

vim匹配特定的行并删除它

From:http://robinfei.blog.sohu.com/111990727.html 删除包含特定字符的行&#xff1a; g/pattern/d 删除不包含指定字符的行&#xff1a; v/pattern/d g!/pattern/d 现实TAB键以及空格等&#xff1a; set list! 删除指定的行&#xff1a; :x,.d #从&#xff58;行…

React开发(171):处理删除与批量删除操作

//处理删除操作handleDelete (id, isBatch) > {if (isBatch && id.length 0) return message.warn(请勾选好友助力);}; 两个参数控制全选和非全选 nice 秒呀

java中异常+连接重置_是什么导致我的java.nett.ocketException:连接重置?

是什么导致我的java.nett.ocketException&#xff1a;连接重置&#xff1f;我们看到了频繁但断断续续的情况。java.net.SocketException: Connection reset我们日志中的错误。我们不确定Connection reset错误实际上来自&#xff0c;以及如何进行调试。这个问题似乎与我们试图发…

ubuntu下查看进程端口

ubuntu下查看进程端口 关键字: linux ubuntu # 查看所有打开的端口及服务名&#xff08;注意这里显示的服务名只是标准端口对应的服务名&#xff0c;可能并不准确&#xff09; nmap localhost # 查看哪些进程打开了指定端口port&#xff08;对于守护进程必须以root用户执行才能…

gzip和gunzip 解压参数

From:http://www.jb51.net/LINUXjishu/11041.html 点评&#xff1a;Linux压缩保留源文件的方法&#xff1a; gzip –c filename > filename.gz Linux解压缩保留源文件的方法&#xff1a; gunzip –c filename.gz > filename gunzip的用法 1.作用 gunzip命令作用是解压文…

React开发(172):React引入背景图片

import React, { Component } from react; import img1 from /assets/1.jpg;

Java游戏聊斋聂小倩_《聊斋倩女幽魂》聂小倩教你赢得战斗

即将由国内最大体感游戏平台——17Vee(亿旗体感)推出的3D单机体感游戏《聊斋之倩女幽魂》因其独特的战斗模式而备受关注。下面&#xff0c;就由《倩女幽魂》的女主角聂小倩来带大家亲身体验一把全新的体感战斗模式。第一步&#xff0c;当然是熟悉体感操作。在第一场战斗前&…

77种互联网盈利创新模式(3)

三&#xff0e;网上销售 11&#xff0e; 电子商务的新贵 《时代》选中亚马逊的CEO贝索斯做风云人物&#xff0c;绝对名副其实。对亚马逊研究越深&#xff0c;越觉得它确实在各方面都具有王者风范。 有1560万种理由认为亚马逊是电子商务之王。这个1560万&#xff0c;正是亚马逊的…

python向服务器请求压缩数据及解压缩数据

向服务器请求压缩数据格式&#xff0c;并解压缩数据 #!/usr/bin/env python # encodingutf-8import urllib2, httplibdef writeFile(fname, data):f open(fname, "w")f.write(data)f.close()if __name__ __main__:httplib.HTTPConnection.debuglevel 1request ur…