الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تغيير ألوان Menus في الدوت نت

بدأه a_pess في 9 مارس 2009 · 2 رد · 4,151 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تغيير ألوان Menus في الدوت نت

اللغة المستخدمة: الفيجوال بيسك

التطبيق: فيجوال استوديو 2005 و 2008

المستوي: التقييم متروك للقارئ

إعداد: مهندس / عمر أمين إبراهيم

post-91400-1236634563_thumb.png

في هذا المقال سنناقش معا كيفية تغيير شكل كل من 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 بشكل احترافي

اعتقد انك تستطيع الأن عزيزي القارئ أن تبني الكلاس كاملا بنفسك لأن الهدف من المقال هو مناقشة أفكارا فقط وليس الهدف هو بناء كل شئ كما قد يتخيل البعض ومن المؤكد انك تستطيع عزيزي القارئ استخدام نفس الفكرة التي ناقشناها في هذا المقال لتطوير الكلاس Skinner الموجود تحت المقال الخاص بتطوير الفورم وهو في اللينك التالي

/index.php?showtopic=188147

بالمرفقات ستجدون نسخة من المثال بنسخة الفيجوال استوديو 2008

بالتوفيق

أخوكم عمر

CsharpExample1.rar

تم تعديل هذه المشاركة بواسطة بن العيد في 10 مارس 2009 في 00:36

1
#2

بس مممكن انغير الون من الخصائص

بس المشكلة هي في دمج الالوان اعتقد بالكود تكون اقوي و افضل

FOTA KHader FAR

سوف اتجة الى عالم الويب

thumb_kujviv1t1.jpg

#3

جزاك الله كل خير ، أسلوبك كان ممتاز في الشرح ، فلم تشرح فقط كيف نغير الألوان.. بل كان في طريقة شرحك شرح للهيمنة و التمرير override & render

تنفع تكون مدرس

مواضيع مشابهة