خلفية التطوير:
طلب مني أحد الأشخاص ذات مرة تطوير أداة إدارة تعرض ألوانًا مختلفة بناءً على تحديدات مختلفة. بدأت أفكر في استخدام المربعات المنسدلة لتغيير خلفية العناصر ولون عرضها بناءً على أسماء العناصر المختلفة، وبناءً على هذه الفكرة، بحثت عبر الإنترنت لفترة طويلة ولم أتمكن من العثور على أي حلول ذات صلة الحل الذي كان أكثر تعقيدًا مما أردته في الأصل (بما في ذلك قاعدة البيانات)، لذلك حاولت العثور على تطبيق أبسط.
توضح هذه المقالة بشكل أساسي كيفية قراءة ألوان النظام وعرض اللون المقابل في كل إدخال في المربع المنسدل، ويعرض كود المصدر المحتوى التالي بشكل أساسي:
1. كيفية الحصول على تعداد القائمة للتحكم في الألوان System.Drawing.KnownColor
2. كيفية استبعاد ألوان بيئة النظام، مثل "الحدود النشطة"
3. كيفية تعيين الألوان لكل عنصر في المربع المنسدل
شرح مفصل للكود:
قم بتسمية المربع المنسدل ddlMultiColor لعرض اسم اللون واللون. استخدم علامة <div> لعرض النتيجة المستطيلة على اليمين. رمز Aspx كما يلي:
<table>
<تر>
<TD>
<asp:معرف DropDownList = "ddlMultiColor"
OnSelectedIndexChanged = "ddlMultiColor_OnSelectedIndexChanged"
runat = "server" AutoPostBack = "true">
</asp:DropDownList>
</TD>
<TD>
<div id="msgColor" runat="server">
</div>
</TD>
</tr>
</table>
في ملف cs نحتاج إلى الإشارة إلى مساحة الاسم التالية:
use System;
باستخدام System.Web؛
باستخدام System.Reflection؛
باستخدام System.Drawing؛
باستخدام System.Collections.Generic؛
دعونا نلقي نظرة على حدث Page_Load أولاً في Page_Load، نقوم بمعالجة وعرض القائمة المنسدلة المحددة.
Page_Load باطلة محمية (مرسل الكائن، EventArgs e)
{
إذا (Page.IsPostBack == خطأ)
{
populateDdlMultiColor(); //51aspx.com
colorManipulation();
}
}
الآن دعونا نلقي نظرة على وظيفة populateDdlMultiColor()
الخاصة void populateDdlMultiColor()
{
ddlMultiColor.DataSource = FinalColorList();
ddlMultiColor.DataBind(); // ترجمة liudao
}
طريقة FinalColorList()
قائمة خاصة FinalColorList()
{
string[] allColors = Enum.GetNames(typeof(System.Drawing.KnownColor));
سلسلة[] SystemEnvironmentColors =
سلسلة جديدة[(
)
).GetProperties().Length];
int Index = 0;
typeof(System.Drawing.SystemColors)).GetProperties())
{
systemEnvironmentColors[index ++] = member.Name;
}
List FinalColorList = new List();
foreach (لون السلسلة بجميع الألوان)
{
إذا (Array.IndexOf(systemEnvironmentColors, color) <0)
{
FinalColorList.Add(color);
}
}
إرجاع قائمة الألوان النهائية؛
}
System.Drawing.KnownColor هو اللون الذي يأتي مع نظام Asp.net نفسه، وقد قمت بإدراج هذه الألوان من خلال التعداد وربطها من خلال مراسلات FinalColorList(). من أجل تحقيق هذه الوظيفة، استخدمت إحدى ميزات التعداد الأساسية: الطريقة المشتركة Enum.GetNames()، التي تكتشف محتوى التعداد وتخرج النتيجة كتسلسل سلسلة، وكل قيمة في السلسلة تتوافق مع كل نتيجة في التعداد.
ومع ذلك، هناك بعض المشاكل مع هذا النهج. وفقًا للفكرة المذكورة أعلاه، سيتضمن مبلغ التعداد لون بيئة النظام، مثل "الحدود النشطة (ملاحظة: الحدود النشطة)". ولحل هذه المشكلة، قمت بتوسيع لون بيئة النظام. لقد استخدمت فئة System.Reflection.MemberInfo.
أقوم هنا بملء systemEnvironmentColors باستخدام خاصية System.Drawing.SystemColors، ثم قم بإنشاء قائمة رسومات باسم FinalColorList. في FinalColorList، أقوم باستدعاء الألوان المعروفة فقط، ولكن ليس بألوان بيئة النظام. ثم قم بربط FinalColorList بـ ddlMultiColor. في هذه المرحلة، لدينا بالفعل مربع منسدل يحتوي على جميع أسماء الألوان، فلنفعل ذلك:
http://www.downcodes.com/
معالجة الألوان باطلة خاصة ()
{
صف صحيح؛
لـ (الصف = 0؛ الصف < ddlMultiColor.Items.Count - 1؛ الصف ++)
{
ddlMultiColor.Items[row].Attributes.Add("style",
"لون الخلفية:" + ddlMultiColor.Items[row].Value);
}
ddlMultiColor.BackColor =
Color.FromName(ddlMultiColor.SelectedItem.Text);//ترجمة liudao
}
تتوافق سمة النمط] الخاصة بلون الخلفية لكل صف في المربع المنسدل مع اسم اللون المعروض في الصف. في حدث OnSelectedIndexChanged، يتم تمييز الصف المحدد في المربع المنسدل من خلال الوظيفة التالية مع علامة <div>، ويتغير أيضًا لون المستطيل الموجود على اليمين وفقًا لذلك.
ddlMultiColor_OnSelectedIndexChanged باطلة محمية (مرسل الكائن،
وسيطات الأحداث هـ)
{
ddlMultiColor.BackColor = Color.FromName(ddlMultiColor.SelectedItem.Text);
colorManipulation();
ddlMultiColor.Items.FindByValue(ddlMultiColor.SelectedValue).Selected =
حقيقي؛
msgColor.Attributes.Add("style", "background:" +
ddlMultiColor.SelectedItem.Value + ";width:30px;height:25px;");
}
لقد تعلمنا حتى الآن كيفية الحصول على System.Drawing وتفريغ لون بيئة النظام وربط اسم اللون بالقائمة المنسدلة.