Latar belakang pengembangan:
Seseorang pernah meminta saya untuk mengembangkan alat manajemen yang akan menampilkan warna berbeda berdasarkan pilihan berbeda. Saya mulai mempertimbangkan untuk menggunakan kotak drop-down untuk mengubah latar belakang dan menampilkan warna item berdasarkan nama item yang berbeda. Berdasarkan ide ini, saya mencari secara online untuk waktu yang lama dan tidak dapat menemukan solusi yang relevan solusi yang lebih rumit dari yang saya inginkan. solusi (termasuk database), jadi saya mencoba mencari implementasi yang lebih sederhana.
Artikel ini terutama menunjukkan cara membaca warna sistem dan menampilkan warna yang sesuai di setiap entri di kotak drop-down. Kode sumber terutama menampilkan konten berikut:
1. Cara mendapatkan daftar enumerasi kontrol warna System.Drawing.KnownColor
2. Cara mengecualikan warna lingkungan sistem, seperti "Perbatasan Aktif"
3. Cara menetapkan warna pada setiap item di kotak drop-down
Penjelasan kode terperinci:
Beri nama drop-down box ddlMultiColor untuk menampilkan nama warna dan warnanya. Gunakan tag <div> untuk menampilkan hasil persegi panjang di sebelah kanan. Kode Aspx adalah sebagai berikut
<tabel>
<tr>
<td>
<asp:DropDownList ID="ddlMultiWarna"
OnSelectedIndexChanged="ddlMultiColor_OnSelectedIndexChanged"
runat="server" AutoPostBack="benar">
</asp:Daftar DropDown>
</td>
<td>
<div id="msgColor" runat="server">
</div>
</td>
</tr>
</table>
Dalam file cs kita perlu mereferensikan namespace berikut:
using System;
menggunakan Sistem.Web;
menggunakan Sistem.Refleksi;
menggunakan Sistem.Gambar;
menggunakan System.Collections.Generik;
Mari kita lihat event Page_Load terlebih dahulu. Di Page_Load kita memproses dan menampilkan daftar drop-down yang dipilih.
dilindungi kekosongan Page_Load (pengirim objek, EventArgs e)
{
jika (Halaman.IsPostBack == salah)
{
populateDdlMultiColor(); //51aspx.com
Manipulasi warna();
}
}
Sekarang mari kita lihat fungsi populateDdlMultiColor()
private void populateDdlMultiColor()
{
ddlMultiColor.DataSource = finalColorList();
ddlMultiColor.DataBind(); //terjemahan liudao
}
finalColorList() metode
Daftar pribadi finalColorList()
{
string[] allColors = Enum.GetNames(typeof(System.Drawing.KnownColor));
string[] sistemWarna Lingkungan =
string baru[(
typeof(System.Drawing.SystemColors)).GetProperties().Length];
int indeks = 0;
foreach (anggota MemberInfo di (
typeof(Sistem.Gambar.SystemColors)).GetProperties())
{
systemEnvironmentColors[index ++] = anggota.Nama;
}
Daftar finalColorList = Daftar baru();
foreach (warna string di semua Warna)
{
jika (Array.IndexOf(systemEnvironmentColors, warna) < 0)
{
finalColorList.Tambahkan(warna);
}
}
kembalikan FinalColorList;
}
System.Drawing.KnownColor adalah warna yang disertakan dengan sistem Asp.net itu sendiri. Saya telah mencantumkan warna-warna ini melalui enumerasi dan mengikatnya melalui korespondensi finalColorList(). Untuk mencapai fungsi ini, saya menggunakan salah satu fitur enumerasi paling dasar: metode bersama Enum.GetNames(), yang mendeteksi konten enumerasi dan menampilkan hasilnya sebagai urutan string, dan setiap nilai dalam string sesuai dengan Setiap hasil dalam pencacahan.
Namun, ada beberapa masalah dengan pendekatan ini. Menurut gagasan di atas, jumlah pencacahan akan menyertakan warna lingkungan sistem, seperti "Perbatasan Aktif (Catatan: Perbatasan Aktif)". Saya menggunakan kelas System.Reflection.MemberInfo.
Di sini saya mengisi systemEnvironmentColors dengan properti System.Drawing.SystemColors, dan kemudian membuat daftar grafik bernama finalColorList. Di finalColorList, saya hanya memanggil warna yang diketahui, tetapi tidak dalam warna lingkungan sistem. Kemudian ikat finalColorList ke ddlMultiColor. Pada titik ini, kita sudah memiliki kotak drop-down yang berisi semua nama warna. Mari kita lakukan:
http://www.downcodes.com/
manipulasi warna kekosongan pribadi()
{
ke dalam baris;
untuk (baris = 0; baris < ddlMultiColor.Items.Count - 1; baris++)
{
ddlMultiColor.Item[baris].Atribut.Tambahkan("gaya",
"warna latar belakang:" + ddlMultiColor.Items[row].Value);
}
ddlMultiColor.BackColor =
Color.FromName(ddlMultiColor.SelectedItem.Text);//terjemahan liudao
}
Atribut Style] warna latar belakang setiap baris di kotak drop-down sesuai dengan nama warna yang ditampilkan di baris tersebut. Dalam acara OnSelectedIndexChanged, baris yang dipilih di kotak drop-down disorot melalui fungsi berikut yang dikombinasikan dengan tag <div>, dan warna persegi panjang di sebelah kanan juga berubah.
dilindungi kekosongan ddlMultiColor_OnSelectedIndexChanged(pengirim objek,
Argumen Peristiwa e)
{
ddlMultiColor.BackColor = Warna.FromName(ddlMultiColor.SelectedItem.Text);
Manipulasi warna();
ddlMultiColor.Items.FindByValue(ddlMultiColor.SelectedValue).Terpilih =
BENAR;
msgWarna.Atribut.Tambahkan("gaya", "latar belakang:" +
ddlMultiColor.SelectedItem.Value + ";width:30px;height:25px;");
}
Sejauh ini, kita telah mempelajari cara mendapatkan System.Drawing dan mengeluarkan warna lingkungan sistem, dan mengikat nama warna ke daftar drop-down.