Entwicklungshintergrund:
Jemand hat mich einmal gebeten, ein Verwaltungstool zu entwickeln, das je nach Auswahl unterschiedliche Farben anzeigt. Ich begann über die Verwendung von Dropdown-Feldern nachzudenken, um den Hintergrund und die Anzeigefarbe von Elementen basierend auf verschiedenen Elementnamen zu ändern. Basierend auf dieser Idee suchte ich lange online und konnte keine relevanten Lösungen finden Lösung, die komplizierter war als die, die ich ursprünglich wollte (einschließlich Datenbank), also habe ich versucht, eine einfachere Implementierung zu finden.
In diesem Artikel wird hauptsächlich gezeigt, wie Systemfarben gelesen und die entsprechenden Farben in jedem Eintrag im Dropdown-Feld angezeigt werden. Der Quellcode zeigt hauptsächlich den folgenden Inhalt:
1. So erhalten Sie die Listenaufzählung des Farbsteuerelements System.Drawing.KnownColor
2. So schließen Sie Systemumgebungsfarben aus, z. B. „Aktiver Rand“
3. So weisen Sie jedem Element im Dropdown-Feld Farben zu
Detaillierte Code-Erklärung:
Benennen Sie das Dropdown-Feld ddlMultiColor, um den Farbnamen und die Farbe anzuzeigen. Verwenden Sie das <div>-Tag, um das rechteckige Ergebnis auf der rechten Seite
anzuzeigen
<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>
In der CS-Datei müssen wir auf den folgenden Namespace verweisen:
using System;
mit System.Web;
Verwenden von System.Reflection;
Verwenden von System.Drawing;
mit System.Collections.Generic;
Schauen wir uns zunächst das Page_Load-Ereignis an. In Page_Load verarbeiten wir die ausgewählte Dropdown-Liste und zeigen sie an.
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
populateDdlMultiColor(); //51aspx.com
colorManipulation();
}
}
Werfen wir nun einen Blick auf die Funktion populateDdlMultiColor()
private void populateDdlMultiColor()
{
ddlMultiColor.DataSource = finalColorList();
ddlMultiColor.DataBind(); //liudao-Übersetzung
}
finalColorList() Methode
private Liste finalColorList()
{
string[] allColors = Enum.GetNames(typeof(System.Drawing.KnownColor));
string[] systemEnvironmentColors =
neue Zeichenfolge[(
typeof(System.Drawing.SystemColors)).GetProperties().Length];
int index = 0;
foreach (MemberInfo member in (
typeof(System.Drawing.SystemColors)).GetProperties())
{
systemEnvironmentColors[index ++] = member.Name;
}
Liste finalColorList = new List();
foreach (Stringfarbe in allColors)
{
if (Array.IndexOf(systemEnvironmentColors, color) < 0)
{
finalColorList.Add(color);
}
}
return finalColorList;
}
System.Drawing.KnownColor ist die Farbe, die mit dem Asp.net-System selbst geliefert wird. Ich habe diese Farben durch Aufzählung aufgelistet und sie durch die finalColorList()-Korrespondenz gebunden. Um diese Funktion zu erreichen, habe ich eine der grundlegendsten Aufzählungsfunktionen verwendet: die gemeinsam genutzte Methode Enum.GetNames(), die den Aufzählungsinhalt erkennt und das Ergebnis als Zeichenfolgensequenz ausgibt, und jeder Wert in der Zeichenfolge entspricht jedem Ergebnis in der Aufzählung.
Allerdings gibt es bei diesem Ansatz einige Probleme. Gemäß der obigen Idee enthält die Aufzählungsmenge die Farbe der Systemumgebung, z. B. „Aktiver Rand (Hinweis: Aktiver Rand)“. Um dieses Problem zu lösen, habe ich die Farbe der Systemumgebung erweitert. Ich habe die Klasse System.Reflection.MemberInfo verwendet.
Hier fülle ich systemEnvironmentColors mit der Eigenschaft System.Drawing.SystemColors und erstelle dann eine Grafikliste mit dem Namen finalColorList. In finalColorList rufe ich nur bekannte Farben auf, nicht jedoch Farben in der Systemumgebung. Binden Sie dann finalColorList an ddlMultiColor. Zu diesem Zeitpunkt haben wir bereits ein Dropdown-Feld mit allen Farbnamen. Los geht's:
http://www.downcodes.com/
private void colorManipulation()
{
int Zeile;
for (row = 0; row < ddlMultiColor.Items.Count - 1; row++)
{
ddlMultiColor.Items[row].Attributes.Add("style",
"Hintergrundfarbe:" + ddlMultiColor.Items[row].Value);
}
ddlMultiColor.BackColor =
Color.FromName(ddlMultiColor.SelectedItem.Text);//liudao-Übersetzung
}
Das Attribut „Stil“ der Hintergrundfarbe jeder Zeile im Dropdown-Feld entspricht dem in der Zeile angezeigten Farbnamen. Im OnSelectedIndexChanged-Ereignis wird die ausgewählte Zeile im Dropdown-Feld durch die folgende Funktion in Kombination mit dem <div>-Tag hervorgehoben, und auch die Farbe des Rechtecks auf der rechten Seite ändert sich entsprechend.
protected void ddlMultiColor_OnSelectedIndexChanged(object sender,
EventArgs e)
{
ddlMultiColor.BackColor = Color.FromName(ddlMultiColor.SelectedItem.Text);
colorManipulation();
ddlMultiColor.Items.FindByValue(ddlMultiColor.SelectedValue).Selected =
WAHR;
msgColor.Attributes.Add("style", "background:" +
ddlMultiColor.SelectedItem.Value + ";width:30px;height:25px;");
}
Bisher haben wir gelernt, wie man System.Drawing erhält, die Systemumgebungsfarbe entlädt und den Farbnamen an die Dropdown-Liste bindet.