Histórico de desenvolvimento:
Certa vez, alguém me pediu para desenvolver uma ferramenta de gerenciamento que exibisse cores diferentes com base em seleções diferentes. Comecei a considerar o uso de caixas suspensas para alterar o plano de fundo e exibir a cor dos itens com base em diferentes nomes de itens. Com base nessa ideia, pesquisei on-line por um longo tempo e não consegui encontrar nenhuma solução relevante. solução que era mais complicada do que a solução que eu queria originalmente (incluindo banco de dados), então tentei encontrar uma implementação mais simples.
Este artigo demonstra principalmente como ler as cores do sistema e exibir a cor correspondente em cada entrada na caixa suspensa. O código-fonte mostra principalmente o seguinte conteúdo:
1. Como obter a enumeração da lista do controle de cores System.Drawing.KnownColor
2. Como excluir cores do ambiente do sistema, como "Borda Ativa"
3. Como atribuir cores a cada item na caixa suspensa
Explicação detalhada do código:
Nomeie a caixa suspensa ddlMultiColor para exibir o nome e a cor da cor. Use a tag <div> para exibir o resultado retangular à direita
.
<tr>
<td>
<asp:DropDownList ID="ddlMultiColor"
OnSelectedIndexChanged="ddlMultiColor_OnSelectedIndexChanged"
runat="servidor" AutoPostBack="true">
</asp:DropDownList>
</td>
<td>
<div id="msgColor" runat="servidor">
</div>
</td>
</tr>
</table>
No arquivo cs precisamos referenciar o seguinte namespace:
using System;
usando System.Web;
usando System.Reflection;
usando System.Drawing;
usando System.Collections.Generic;
Vamos primeiro dar uma olhada no evento Page_Load. Em Page_Load processamos e exibimos a lista suspensa selecionada.
protegido void Page_Load (remetente do objeto, EventArgs e)
{
if (Page.IsPostBack == falso)
{
populateDdlMultiColor();/51aspx.com
colorManipulation();
}
}
Agora vamos dar uma olhada na função populateDdlMultiColor()
private void populateDdlMultiColor()
{
ddlMultiColor.DataSource = finalColorList();
ddlMultiColor.DataBind(); //liudao tradução
}
método finalColorList()
lista privada finalColorList()
{
string[] allColors = Enum.GetNames(typeof(System.Drawing.KnownColor));
string[] systemEnvironmentColors =
nova sequência[(
typeof(System.Drawing.SystemColors)).GetProperties().Length];
int
index = 0;
typeof(System.Drawing.SystemColors)).GetProperties())
{
systemEnvironmentColors[index ++] = membro.Nome;
}
Lista finalColorList = new Lista();
foreach (cor da string em allColors)
{
if (Array.IndexOf(systemEnvironmentColors, color) <0)
{
finalColorList.Add(cor);
}
}
retornar finalColorList;
}
System.Drawing.KnownColor é a cor que vem com o próprio sistema Asp.net. Listei essas cores por meio de enumeração e as vinculei por meio da correspondência finalColorList(). Para realizar esta função, usei um dos recursos de enumeração mais básicos: o método compartilhado Enum.GetNames(), que detecta o conteúdo da enumeração e gera o resultado como uma sequência de string, e cada valor na string corresponde a Cada resultado na enumeração.
No entanto, existem alguns problemas com esta abordagem. De acordo com a ideia acima, o valor da enumeração incluirá a cor do ambiente do sistema, como “Borda Ativa (Nota: Borda Ativa)”. Usei a classe System.Reflection.MemberInfo.
Aqui eu preencho systemEnvironmentColors com a propriedade System.Drawing.SystemColors e, em seguida, crio uma lista gráfica chamada finalColorList. Em finalColorList, chamo apenas cores conhecidas, mas não nas cores do ambiente do sistema. Em seguida, vincule finalColorList a ddlMultiColor. Neste ponto, já temos uma caixa suspensa contendo todos os nomes de cores. Vamos fazer isso:
http://www.downcodes.com/
private void colorManipulation()
{
linha interna;
for (linha = 0; linha < ddlMultiColor.Items.Count - 1; linha++)
{
ddlMultiColor.Items[linha].Attributes.Add("estilo",
"cor de fundo:" + ddlMultiColor.Items[linha].Valor);
}
ddlMultiColor.BackColor =
Color.FromName(ddlMultiColor.SelectedItem.Text);//tradução liudao
}
O atributo Style] da cor de fundo de cada linha na caixa suspensa corresponde ao nome da cor exibida na linha. No evento OnSelectedIndexChanged, a linha selecionada na caixa suspensa é destacada por meio da seguinte função combinada com a tag <div>, e a cor do retângulo à direita também muda de acordo.
protegido void ddlMultiColor_OnSelectedIndexChanged(objeto remetente,
EventArgs e)
{
ddlMultiColor.BackColor = Color.FromName(ddlMultiColor.SelectedItem.Text);
colorManipulation();
ddlMultiColor.Items.FindByValue(ddlMultiColor.SelectedValue).Selected =
verdadeiro;
msgColor.Attributes.Add("estilo", "plano de fundo:" +
ddlMultiColor.SelectedItem.Value + ";largura:30px;altura:25px;");
}
Até agora, aprendemos como obter System.Drawing e descarregar a cor do ambiente do sistema e vincular o nome da cor à lista suspensa.