تغيير ألوان Menus في الدوت نت
اللغة المستخدمة: الفيجوال #C
التطبيق: فيجوال استوديو 2005 و 2008
المستوي: التقييم متروك للقارئ
إعداد: مهندس تحكم / عاطف بدوى
في هذا المقال سنناقش معا كيفية تغيير شكل كل من MenuStrip و ContextMenuStrip و ToolStrip وأيضا StatusMeunuStrip لكي نجعلهم جميعا يأخذون شكلا وألوانا جديدة حسب رغبتنا وهذه الفكرة من الممكن استخدامها مع المقال الخاص بتطوير الفورم الموجود تحت اللينك التالي
وسنحاول أن نفعل ذلك بأقل مجهود يذكر وبدون أن نرسم أي شئ حيث أن كل ذلك سيتم عن طريق التعامل مع الألوان وكلمة السر في كل ذلك هي كلاس واحد فقط وهذا الكلاس موجود في الدوت نت واسمه ProfessionalColorTable Class ومايكروسوفت وكما أشارت عند تعريفها لهذا الكلاس بأنها تستخدم هذا الكلاس لتغيير ألوان بعض العناصر المستخدمة في برنامج الأوفيس MS Office وهذا التعريف ليس دقيقا مائة بالمائة فهم يستخدمونه أيضا مع بعض البرامج الأخري وعلي سبيل المثال لو نظرت الي ألوان القوائم الموجودة في الفيجوال استوديو ستجد أن ألوانها تختلف تماما عن الأوفيس إذن كيف نستفيد نحن أيضا من هذا الكلاس؟
لو نظرنا الي هذا الكلاس عن قرب سنجد أن جميع الصفات Properties الموجودة بهذا الكلاس وعددهم تحديدا عبارة عن 57 صفة سنكتشف أنها تمثل مجموعة من الألوان لا غير وكما تلاحظون أن عدد هذه الصفات كبير لذلك عليك عزيزي القارئ أن تفتح ملف Help في الفيجوال استوديو وحاول أن تقرأ و تتعرف عن الهدف من كل ًصفة موجودة بهذا الكلاس
عموما الفكرة هنا وببساطة شديدة هي أننا علينا بناء كلاس شبيه بهذا الكلاس عن طريق استخدام الوراثة ثم نقوم بعمل Override لصفات الكلاس ونغير الألوان الي أي ألوان نريدها ثم نمرر هذا الكلاس الي كل من MenuStrip و ContextMenuStrip و ToolStrip وأيضا StatusMeunuStrip ويتم تمرير الكلاس الذي تم بناؤه عن طريق استخدام كلاس أخر موجود في الدوت نت وهو ToolStripProfessionalRenderer Class
وفي المثال التالي سنتعرف علي كيفية عمل ذلك حيث هنا سوف نقوم بتغيير ألوان Menus ولتنفيذ المثال افتح مشروع جديد ثم عليك أن تضيف الي الفورم MenuStrip و ContextMenuStrip و ToolStrip وأيضا StatusMeunuStrip وهي عناصر قلما يخلو منها أي فورم ثم عليك أن تضيف الي المشروع كلاس أخر وأعطه أي اسم تريد وهنا سوف أعطي هذا الكلاس اسم MenuColoring ثم وباستخدام الوراثة للكلاس ProfessionalColorTable سنقوم بعمل Override لبعض صفاته ثم نمرره بعد ذلك الي كل من MenuStrip و ContextMenuStrip و ToolStrip وأيضا StatusMeunuStrip والكود التالي يوضح شكل هذا الكلاس
رمز:
class MenuColoring : ProfessionalColorTable
{
Color cb = Color.OrangeRed;
Color fb = Color.FromArgb(61, 94, 195);
int alpha = 150;
int beta = 200;
public override System.Drawing.Color ImageMarginGradientMiddle
{
get { return Color.Red; }
}
public override System.Drawing.Color ToolStripDropDownBackground
{
get { return Color.FromArgb(alpha, fb); }
}
public override System.Drawing.Color ToolStripGradientBegin
{
get { return Color.FromArgb(255, 128, 128); }
}
public override System.Drawing.Color ToolStripGradientEnd
{
get { return Color.Red; }
}
public override System.Drawing.Color ToolStripGradientMiddle
{
get { return Color.FromArgb(255, 128, 128); }
}
public override Color StatusStripGradientBegin
{
get { return Color.FromArgb(255, 128, 128); }
}
public override Color StatusStripGradientEnd
{
get { return Color.Red; }
}
public override System.Drawing.Color MenuStripGradientBegin
{
get { return Color.Red; }
}
public override System.Drawing.Color MenuStripGradientEnd
{
get { return fb; }
}
public override System.Drawing.Color MenuItemSelected
{
get { return Color.FromArgb(alpha, cb); }
}
public override System.Drawing.Color MenuItemBorder
{
get { return Color.FromArgb(beta, cb); }
}
public override System.Drawing.Color MenuItemPressedGradientBegin
{
get { return base.MenuItemPressedGradientBegin; }
}
public override System.Drawing.Color MenuItemPressedGradientEnd
{
get { return base.MenuItemPressedGradientEnd; }
}
public override System.Drawing.Color MenuItemPressedGradientMiddle
{
get { return base.MenuStripGradientEnd; }
}
public override System.Drawing.Color ImageMarginGradientBegin
{
get { return Color.FromArgb(0xfe, 0xfe, 0xfb); }
}
public override System.Drawing.Color ImageMarginGradientEnd
{
get { return Color.FromArgb(0xbd, 0xbd, 0xa3); }
}
}
لأن لنربط الكلاس MenuColoring مع كل من MenuStrip و ContextMenuStrip و ToolStrip وStatusMeunuStrip الموجودة داخل الفورم حيث سنفعل ذلك من داخل الحدث Load الخاص بالفورم والكود التالي يوضح ذلك
رمز:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private MenuColoring mnuColoring = new MenuColoring();
private void Form1_Load(object sender, EventArgs e)
{
menuStrip1.Renderer = new ToolStripProfessionalRenderer(mnuColoring);
contextMenuStrip1.Renderer = new ToolStripProfessionalRenderer(mnuColoring);
toolStrip1.Renderer = new ToolStripProfessionalRenderer(mnuColoring);
statusStrip1.Renderer = new ToolStripProfessionalRenderer(mnuColoring);
this.ContextMenuStrip = this.contextMenuStrip1;
}
}
كما تلاحظون لقد استخدمت بعض الألوان وبأكثر من أسلوب وبشكل عشوائي أيضا لتوضيح الفكرة فقط لا غير وعليك عزيزي القارئ أن تختار الألوان المناسبة لكل صفة بحيث تكون مناسبة مع بعضها البعض ولكي تظهر Menus بشكل احترافي