ภูมิหลังการพัฒนา:
มีคนเคยขอให้ฉันพัฒนาเครื่องมือการจัดการที่จะแสดงสีที่แตกต่างกันตามการเลือกที่แตกต่างกัน ฉันเริ่มพิจารณาใช้กล่องแบบเลื่อนลงเพื่อเปลี่ยนพื้นหลังและแสดงสีของรายการตามชื่อรายการต่างๆ จากแนวคิดนี้ ฉันค้นหาทางออนไลน์เป็นเวลานานและไม่พบวิธีแก้ปัญหาที่เกี่ยวข้อง โซลูชันที่ซับซ้อนกว่าที่ฉันต้องการในตอนแรก (รวมถึงฐานข้อมูล) ดังนั้นฉันจึงพยายามค้นหาการใช้งานที่ง่ายกว่า
บทความนี้จะสาธิตวิธีการอ่านสีของระบบและแสดงสีที่เกี่ยวข้องในแต่ละรายการในกล่องแบบเลื่อนลงเป็นหลัก ซอร์สโค้ดจะแสดงเนื้อหาต่อไปนี้เป็นหลัก:
1. วิธีการขอรับรายการการแจงนับของตัวควบคุมสี System. Drawing.KnownColor
2. วิธีแยกสีสภาพแวดล้อมของระบบ เช่น "Active Border"
3. วิธีกำหนดสีให้กับแต่ละรายการในกล่องแบบเลื่อนลง
คำอธิบายรหัสโดยละเอียด:
ตั้งชื่อกล่องแบบเลื่อนลง ddlMultiColor เพื่อแสดงชื่อสีและสี ใช้แท็ก <div> เพื่อแสดงผลลัพธ์สี่เหลี่ยมทางด้านขวา รหัส Aspx เป็นดังนี้
<table>
<tr>
<td>
<asp:DropDownList ID="ddlMultiColor"
OnSelectedIndexChanged = "ddlMultiColor_OnSelectedIndexChanged"
runat = "เซิร์ฟเวอร์" AutoPostBack = "true">
</asp:DropDownList>
</td>
<td>
<div id="msgColor" runat="server">
</div>
</td>
</tr>
</table>
ในไฟล์ cs เราจำเป็นต้องอ้างอิงเนมสเปซต่อไปนี้:
การใช้ System;
ใช้ System.Web;
โดยใช้ System.Reflection;
โดยใช้ระบบการวาดภาพ;
ใช้ System.Collections.Generic;
มาดูเหตุการณ์ Page_Load ก่อน ใน Page_Load เราประมวลผลและแสดงรายการแบบเลื่อนลงที่เลือก
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
ถ้า (หน้า IsPostBack == เท็จ)
-
populateDdlMultiColor(); //51aspx.com
การจัดการสี();
-
}
ตอนนี้เรามาดูฟังก์ชัน populateDdlMultiColor()
ส่วนตัว void populateDdlMultiColor()
-
ddlMultiColor.DataSource = FinalColorList();
ddlMultiColor.DataBind(); //แปล liudao
}
วิธีการ FinalColorList()
รายการส่วนตัว FinalColorList()
-
string[] allColors = Enum.GetNames(typeof(System. Drawing.KnownColor));
สตริง [] systemEnvironmentColors =
สตริงใหม่[(
typeof (System. Drawing.SystemColors)). GetProperties ().
int ดัชนี = 0;
foreach (สมาชิก MemberInfo ใน ()
typeof(System. Drawing.SystemColors)).GetProperties())
-
systemEnvironmentColors[ดัชนี ++] = member.Name;
}
รายการ FinalColorList = รายการใหม่();
foreach (สีสตริงใน allColors)
-
ถ้า (Array.IndexOf (systemEnvironmentColors, สี) < 0)
-
FinalColorList.Add(สี);
-
-
กลับ FinalColorList;
-
System. Drawing.KnownColor คือสีที่มาพร้อมกับระบบ Asp.net ฉันได้แสดงรายการสีเหล่านี้ผ่านการแจงนับและผูกไว้ผ่านการโต้ตอบขั้นสุดท้ายของ ColorList() เพื่อให้บรรลุฟังก์ชันนี้ ฉันใช้หนึ่งในคุณสมบัติการแจงนับพื้นฐานที่สุด: วิธีที่ใช้ร่วมกันของ Enum.GetNames() ซึ่งจะตรวจจับเนื้อหาการแจงนับและส่งออกผลลัพธ์เป็นลำดับสตริง และแต่ละค่าในสตริงจะสอดคล้องกับแต่ละผลลัพธ์ ในการแจงนับ
อย่างไรก็ตาม แนวทางนี้มีปัญหาบางประการ ตามแนวคิดข้างต้น จำนวนการแจงนับจะรวมสีของสภาพแวดล้อมของระบบ เช่น "เส้นขอบที่ใช้งานอยู่ (หมายเหตุ: เส้นขอบที่ใช้งานอยู่)" เพื่อที่จะแก้ไขปัญหานี้ ฉันจึงขยายสีของสภาพแวดล้อมของระบบ ฉันใช้คลาส System.Reflection.MemberInfo
ที่นี่ฉันเติม systemEnvironmentColors ด้วยคุณสมบัติ System. Drawing.SystemColors จากนั้นสร้างรายการกราฟิกชื่อ FinalColorList ใน FinalColorList ฉันเรียกเฉพาะสีที่รู้จักเท่านั้น แต่ไม่ใช่ในสีสภาพแวดล้อมของระบบ จากนั้นผูก FinalColorList กับ ddlMultiColor ณ จุดนี้ เรามีกล่องดรอปดาวน์ที่มีชื่อสีทั้งหมดอยู่แล้ว เรามาทำกันเลย:
http://www.downcodes.com/
colorManipulation เป็นโมฆะส่วนตัว ()
-
แถว int;
สำหรับ (แถว = 0; แถว < ddlMultiColor.Items.Count - 1; แถว++)
-
ddlMultiColor.Items[แถว].Attributes.Add("สไตล์",
"สีพื้นหลัง:" + ddlMultiColor.Items[แถว].Value);
-
ddlMultiColor.BackColor=
Color.FromName(ddlMultiColor.SelectedItem.Text);//liudao การแปล
}
คุณลักษณะ] ของสีพื้นหลังของแต่ละแถวในกล่องแบบเลื่อนลงสอดคล้องกับชื่อสีที่แสดงในแถว ในเหตุการณ์ OnSelectedIndexChanged แถวที่เลือกในกล่องดรอปดาวน์จะถูกเน้นผ่านฟังก์ชันต่อไปนี้รวมกับแท็ก <div> และสีของสี่เหลี่ยมผืนผ้าทางด้านขวาจะเปลี่ยนตามไปด้วย
โมฆะที่ได้รับการป้องกัน ddlMultiColor_OnSelectedIndexChanged (ผู้ส่งวัตถุ
EventArgs จ)
-
ddlMultiColor.BackColor = Color.FromName(ddlMultiColor.SelectedItem.Text);
การจัดการสี();
ddlMultiColor.Items.FindByValue (ddlMultiColor.SelectedValue). เลือก =
จริง;
msgColor.Attributes.Add("style", "พื้นหลัง:" +
ddlMultiColor.SelectedItem.Value + ";ความกว้าง:30px;ความสูง:25px;");
}
จนถึงตอนนี้ เราได้เรียนรู้วิธีรับ System.Drawing และคายประจุสีสภาพแวดล้อมของระบบ และผูกชื่อสีเข้ากับรายการแบบเลื่อนลง