Contexte de développement :
Quelqu'un m'a demandé un jour de développer un outil de gestion qui afficherait différentes couleurs en fonction de différentes sélections. J'ai commencé à envisager d'utiliser des listes déroulantes pour modifier l'arrière-plan et la couleur d'affichage des éléments en fonction de différents noms d'éléments. Sur la base de cette idée, j'ai longuement cherché en ligne et je n'ai trouvé aucune solution pertinente. solution qui était plus compliquée que ce que je voulais à l'origine (y compris la base de données), j'ai donc essayé de trouver une implémentation plus simple.
Cet article montre principalement comment lire les couleurs du système et afficher la couleur correspondante dans chaque entrée de la liste déroulante. Le code source affiche principalement le contenu suivant :
1. Comment obtenir l'énumération de liste du contrôle de couleur System.Drawing.KnownColor
2. Comment exclure les couleurs de l'environnement système, telles que « Active Border »
3. Comment attribuer des couleurs à chaque élément dans la liste déroulante
Explication détaillée du code :
Nommez la liste déroulante ddlMultiColor pour afficher le nom et la couleur de la couleur. Utilisez la balise <div> pour afficher le résultat rectangulaire à droite. Le code Aspx est le suivant
<table>.
<tr>
<td>
<asp:DropDownList ID="ddlMultiColor"
OnSelectedIndexChanged="ddlMultiColor_OnSelectedIndexChanged"
runat="serveur" AutoPostBack="true">
</asp:DropDownList>
</td>
<td>
<div id="msgColor" runat="serveur">
</div>
</td>
</tr>
</table>
Dans le fichier cs, nous devons référencer l'espace de noms suivant :
using System ;
en utilisant System.Web ;
en utilisant System.Reflection ;
en utilisant System.Drawing ;
en utilisant System.Collections.Generic ;
Jetons d'abord un coup d'œil à l'événement Page_Load. Dans Page_Load, nous traitons et affichons la liste déroulante sélectionnée.
protected void Page_Load (expéditeur de l'objet, EventArgs e)
{
si (Page.IsPostBack == false)
{
populateDdlMultiColor(); //51aspx.com
colorManipulation();
}
}
Jetons maintenant un coup d'oeil à la fonction populateDdlMultiColor()
private void populateDdlMultiColor()
{
ddlMultiColor.DataSource = finalColorList();
ddlMultiColor.DataBind(); //traduction liudao
}
méthode finalColorList()
liste privée finalColorList()
{
string[] allColors = Enum.GetNames(typeof(System.Drawing.KnownColor));
string[] systemEnvironmentColors =
nouvelle chaîne[(
typeof(System.Drawing.SystemColors)).GetProperties().Length];
int index = 0
foreach (membre MemberInfo dans (
typeof(System.Drawing.SystemColors)).GetProperties())
{
systemEnvironmentColors[index ++] = membre.Name;
}
Liste finalColorList = new List();
foreach (couleur de la chaîne dans allColors)
{
if (Array.IndexOf(systemEnvironmentColors, couleur) < 0)
{
finalColorList.Add(couleur);
}
}
renvoie la liste finale des couleurs ;
}
System.Drawing.KnownColor est la couleur fournie avec le système Asp.net lui-même. J'ai répertorié ces couleurs par énumération et je les ai liées via la correspondance finalColorList(). Pour réaliser cette fonction, j'ai utilisé l'une des fonctionnalités d'énumération les plus élémentaires : la méthode partagée Enum.GetNames(), qui détecte le contenu de l'énumération et génère le résultat sous forme de séquence de chaîne, et chaque valeur de la chaîne correspond à chaque résultat. dans le dénombrement.
Cependant, cette approche pose certains problèmes. Selon l'idée ci-dessus, le montant de l'énumération inclura la couleur de l'environnement système, telle que "Bordure active (Remarque : bordure active)". Afin de résoudre ce problème, j'ai étendu la couleur de l'environnement système. J'ai utilisé la classe System.Reflection.MemberInfo.
Ici, je remplis systemEnvironmentColors avec la propriété System.Drawing.SystemColors, puis je crée une liste de graphiques nommée finalColorList. Dans finalColorList, j'appelle uniquement les couleurs connues, mais pas les couleurs de l'environnement système. Liez ensuite finalColorList à ddlMultiColor. À ce stade, nous avons déjà une liste déroulante contenant tous les noms de couleurs. Faisons-le :
http://www.downcodes.com/
couleur vide privéeManipulation()
{
rangée intérieure ;
pour (ligne = 0 ; ligne < ddlMultiColor.Items.Count - 1 ; ligne++)
{
ddlMultiColor.Items[ligne].Attributes.Add("style",
"couleur de fond :" + ddlMultiColor.Items[row].Value);
}
ddlMultiColor.BackColor =
Color.FromName(ddlMultiColor.SelectedItem.Text);//traduction liudao
}
L'attribut Style] de la couleur de fond de chaque ligne dans la liste déroulante correspond au nom de couleur affiché dans la ligne. Dans l'événement OnSelectedIndexChanged, la ligne sélectionnée dans la liste déroulante est mise en surbrillance via la fonction suivante combinée avec la balise <div>, et la couleur du rectangle de droite change également en conséquence.
protected void ddlMultiColor_OnSelectedIndexChanged(expéditeur d'objet,
EventArgse)
{
ddlMultiColor.BackColor = Color.FromName(ddlMultiColor.SelectedItem.Text);
colorManipulation();
ddlMultiColor.Items.FindByValue(ddlMultiColor.SelectedValue).Selected =
vrai;
msgColor.Attributes.Add("style", "background:" +
ddlMultiColor.SelectedItem.Value + ";largeur:30px;hauteur:25px;");
}
Jusqu'à présent, nous avons appris comment obtenir System.Drawing et décharger la couleur de l'environnement système, et lier le nom de la couleur à la liste déroulante.