Antecedentes de desarrollo:
Una vez alguien me pidió que desarrollara una herramienta de gestión que mostrara diferentes colores según diferentes selecciones. Comencé a considerar el uso de cuadros desplegables para cambiar el fondo y mostrar el color de los elementos en función de diferentes nombres de elementos. Busqué en línea durante mucho tiempo y finalmente no pude encontrar ninguna solución relevante. solución que era más complicada de lo que quería originalmente (incluida la base de datos), así que intenté encontrar una implementación más simple.
Este artículo demuestra principalmente cómo leer los colores del sistema y mostrar el color correspondiente en cada entrada en el cuadro desplegable. El código fuente muestra principalmente el siguiente contenido:
1. Cómo obtener la enumeración de lista del control de color System.Drawing.KnownColor
2. Cómo excluir colores del entorno del sistema, como "Borde activo"
3. Cómo asignar colores a cada elemento del cuadro desplegable
Explicación detallada del código:
Asigne al cuadro desplegable el nombre ddlMultiColor para mostrar el nombre y el color. Utilice la etiqueta <div> para mostrar el resultado rectangular a la derecha. El código Aspx es el siguiente
<tabla>.
<tr>
<td>
<asp:DropDownList ID="ddlMultiColor"
OnSelectedIndexChanged="ddlMultiColor_OnSelectedIndexChanged"
runat="servidor" AutoPostBack="true">
</asp:ListaDesplegable>
</td>
<td>
<div id="msgColor" runat="servidor">
</div>
</td>
</tr>
</table>
En el archivo cs necesitamos hacer referencia al siguiente espacio de nombres:
using System;
usando System.Web;
usando System.Reflection;
usando System.Drawing;
usando System.Collections.Generic;
Primero echemos un vistazo al evento Page_Load. En Page_Load procesamos y mostramos la lista desplegable seleccionada.
Page_Load vacío protegido (remitente del objeto, EventArgs e)
{
si (Page.IsPostBack == falso)
{
populateDdlMultiColor(); //51aspx.com
Manipulación de colores();
}
}
Ahora echemos un vistazo a la función populateDdlMultiColor()
private void populateDdlMultiColor()
{
ddlMultiColor.DataSource = finalColorList();
ddlMultiColor.DataBind(); //traducción liudao
}
finalColorList() método
Lista privada finalColorList()
{
string[] allColors = Enum.GetNames(typeof(System.Drawing.KnownColor));
cadena[] systemEnvironmentColors =
nueva cadena[(
typeof(System.Drawing.SystemColors)).GetProperties().Length];
int index = 0
foreach (miembro MemberInfo en (
tipo de (System.Drawing.SystemColors)).GetProperties())
{
systemEnvironmentColors[index ++] = miembro.Nombre;
}
Lista finalColorList = nueva Lista();
foreach (color de cadena en todos los colores)
{
si (Array.IndexOf(systemEnvironmentColors, color) < 0)
{
finalColorList.Add(color);
}
}
devolver lista de colores final;
}
System.Drawing.KnownColor es el color que viene con el propio sistema Asp.net. He enumerado estos colores mediante enumeración y los he vinculado mediante la correspondencia finalColorList(). Para lograr esta función, utilicé una de las funciones de enumeración más básicas: el método compartido Enum.GetNames(), que detecta el contenido de la enumeración y genera el resultado como una secuencia de cadenas, y cada valor en la cadena corresponde a cada resultado. en la enumeración.
Sin embargo, existen algunos problemas con este enfoque. De acuerdo con la idea anterior, la cantidad de enumeración incluirá el color del entorno del sistema, como "Borde activo (Nota: borde activo)". Para resolver este problema, amplié el color del entorno del sistema. Usé la clase System.Reflection.MemberInfo.
Aquí completo systemEnvironmentColors con la propiedad System.Drawing.SystemColors y luego creo una lista de gráficos llamada finalColorList. En finalColorList, solo llamo colores conocidos, pero no los colores del entorno del sistema. Luego vincule finalColorList a ddlMultiColor. En este punto, ya tenemos un cuadro desplegable que contiene todos los nombres de colores. Hagámoslo:
http://www.downcodes.com/
Manipulación de color vacía privada()
{
en fila;
para (fila = 0; fila < ddlMultiColor.Items.Count - 1; fila++)
{
ddlMultiColor.Items[fila].Attributes.Add("estilo",
"color de fondo:" + ddlMultiColor.Items[fila].Valor);
}
ddlMultiColor.BackColor =
Color.FromName(ddlMultiColor.SelectedItem.Text);//traducción liudao
}
El atributo Estilo] del color de fondo de cada fila en el cuadro desplegable corresponde al nombre del color que se muestra en la fila. En el evento OnSelectedIndexChanged, la fila seleccionada en el cuadro desplegable se resalta mediante la siguiente función combinada con la etiqueta <div>, y el color del rectángulo de la derecha también cambia en consecuencia.
void protegido ddlMultiColor_OnSelectedIndexChanged (remitente del objeto,
Argumentos de evento e)
{
ddlMultiColor.BackColor = Color.FromName(ddlMultiColor.SelectedItem.Text);
Manipulación de colores();
ddlMultiColor.Items.FindByValue(ddlMultiColor.SelectedValue).Seleccionado =
verdadero;
msgColor.Attributes.Add("estilo", "fondo:" +
ddlMultiColor.SelectedItem.Value + ";ancho:30px;alto:25px;");
}
Hasta ahora, hemos aprendido cómo obtener System.Drawing y descargar el color del entorno del sistema, y vincular el nombre del color a la lista desplegable.