Предыстория разработки:
Однажды кто-то попросил меня разработать инструмент управления, который отображал бы разные цвета в зависимости от выбора. Я начал рассматривать возможность использования раскрывающихся списков для изменения фона и цвета элементов в зависимости от их названий. Основываясь на этой идее, я долго искал в Интернете и не нашел подходящего решения. решение, которое было более сложным, чем то, что я изначально хотел (включая базу данных), поэтому я попытался найти более простую реализацию.
В этой статье в основном показано, как читать системные цвета и отображать соответствующий цвет в каждой записи раскрывающегося списка. Исходный код в основном показывает следующее содержимое:
1. Как получить перечисление списка элемента управления цветом System.Drawing.KnownColor
2. Как исключить цвета системного окружения, такие как «Активная граница»
3. Как назначить цвета каждому элементу в раскрывающемся списке
Подробное объяснение кода:
Назовите раскрывающийся список ddlMultiColor, чтобы отобразить имя и цвет цвета. Используйте тег <div>, чтобы отобразить прямоугольный результат справа. Код Aspx выглядит следующим образом:
<table>.
<тр>
<тд>
<asp:DropDownList ID="ddlMultiColor"
OnSelectedIndexChanged="ddlMultiColor_OnSelectedIndexChanged"
runat="сервер" AutoPostBack="true">
</asp:DropDownList>
</td>
<тд>
<div id="msgColor" runat="server">
</div>
</td>
</tr>
</table>
В файле cs нам нужно сослаться на следующее пространство имен:
using System;
использование System.Web;
использование System.Reflection;
использование System.Drawing;
использование System.Collections.Generic;
Давайте сначала рассмотрим событие Page_Load. В Page_Load мы обрабатываем и отображаем выбранный раскрывающийся список.
protected void Page_Load (отправитель объекта, EventArgs e)
{
если (Page.IsPostBack == false)
{
populateDdlMultiColor(); //51aspx.com;
ЦветМанипуляция();
}
}
Теперь давайте взглянем на функцию populateDdlMultiColor
(). Private void populateDdlMultiColor().
{
ddlMultiColor.DataSource = FinalColorList();
ddlMultiColor.DataBind(); // перевод Liudao
}
Метод FinalColorList()
Private List FinalColorList()
{
string[] allColors = Enum.GetNames(typeof(System.Drawing.KnownColor));
строка [] systemEnvironmentColors =
новая строка[(
typeof(System.Drawing.SystemColors)).GetProperties().Length];
int index = 0;
foreach (член MemberInfo в ()
typeof(System.Drawing.SystemColors)).GetProperties())
{
systemEnvironmentColors[index++] =member.Name;
}
Список FinalColorList = новый список ();
foreach (цвет строки в allColors)
{
если (Array.IndexOf(systemEnvironmentColors, цвет) <0)
{
FinalColorList.Add(цвет);
}
}
вернуть окончательный список цветов;
}
System.Drawing.KnownColor — это цвет, который поставляется с самой системой Asp.net. Я перечислил эти цвета посредством перечисления и связал их с помощью соответствия FinalColorList(). Чтобы реализовать эту функцию, я использовал одну из самых основных функций перечисления: общий метод Enum.GetNames(), который определяет содержимое перечисления и выводит результат в виде последовательности строк, а каждое значение в строке соответствует каждому результату. в перечислении.
Однако с этим подходом есть некоторые проблемы. Согласно приведенной выше идее, сумма перечисления будет включать цвет системной среды, например «Активная граница (примечание: активная граница)». Чтобы решить эту проблему, я расширил цвет системной среды. Я использовал класс System.Reflection.MemberInfo.
Здесь я заполняю systemEnvironmentColors свойством System.Drawing.SystemColors, а затем создаю графический список с именем FinalColorList. В FinalColorList я вызываю только известные цвета, но не цвета системной среды. Затем привяжите FinalColorList к ddlMultiColor. На данный момент у нас уже есть раскрывающийся список, содержащий названия всех цветов. Давайте сделаем это:
http://www.downcodes.com/
частная пустота colorManipulation()
{
внутренняя строка;
for (строка = 0; строка < ddlMultiColor.Items.Count - 1; строка++)
{
ddlMultiColor.Items[строка].Attributes.Add("стиль",
"цвет фона:" + ddlMultiColor.Items[row].Value);
}
ddlMultiColor.BackColor =
Color.FromName(ddlMultiColor.SelectedItem.Text);//перевод liudao
}
Атрибут Style] цвета фона каждой строки в раскрывающемся списке соответствует названию цвета, отображаемому в строке. В событии OnSelectedIndexChanged выбранная строка в раскрывающемся списке выделяется с помощью следующей функции в сочетании с тегом <div>, и цвет прямоугольника справа также изменяется соответствующим образом.
protected void ddlMultiColor_OnSelectedIndexChanged(отправитель объекта,
EventArgs д)
{
ddlMultiColor.BackColor = Color.FromName(ddlMultiColor.SelectedItem.Text);
ЦветМанипуляция();
ddlMultiColor.Items.FindByValue(ddlMultiColor.SelectedValue).Выбрано =
истинный;
msgColor.Attributes.Add("стиль", "фон:" +
ddlMultiColor.SelectedItem.Value + ";ширина:30px;высота:25px;");
}
На данный момент мы научились получать System.Drawing, выгружать цвет системной среды и привязывать имя цвета к раскрывающемуся списку.