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

كيفية عمل كومبو بوكس للألوان

بدأه GHOST2010 في 7 يونيو 2009 · 6 رد · 1,620 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه ،،

هذا مثال عملى يوضح كيفية عرض الألوان داخل الكومبوبوكس

قم بإنشاء مشروع جديد وضع على الفورم أداة كومبو وسمها ComboBox1 (الاسم الافتراضى)

الخاصية التى تهمنا هى DrawMode وهى المسئولة عن رسم العناصر داخل الكومبو ولها 3 قيم

1- Normal وهى القيمة الافتراضية وتجعل الكومبو يقوم برسم العناصر دون أى تدخل من المبرمج

2- OwnerDrawFixed تجعل المبرمج هو المسئول الأول والأخير عن رسم العناصر داخل الكومبو

3- OwnerDrawVariable مثل سابقتها والفرق يكمن فى أن الأولى ترسم كل العناصر بنفس الحجم أما هذه فتجعل المبرمج قادر على رسم كل عنصر بحجم مختلف عن طريق الحدث MeasureItem

المهم

نغير قيمة هذه الخاصية إلى OwnerDrawFixed

Me.ComboBox1.DrawMode = DrawMode.OwnerDrawFixed

الآن نقوم بإضافة الألوان داخل الكومبو

		For Each colorName As String In [Enum].GetNames(GetType(System.Drawing.KnownColor))
			Me.ComboBox1.Items.Add(colorName)
		Next

فى كل مرة يتم إضافة عنصر سيتم إطلاق الحدث DrawItem وهو المحور الأساسى الذى سيتم العمل عليه

Private Sub ComboBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem
End Sub

أول كود يجب كتابته فى هذا الحدث هو

e.DrawBackground()

وهذا الكود يقوم بمسح الرسم القديم الذى قمنا به كما يقوم برسم مستطيل التحديد FocusRectangle

(إن لم تكن واضحة لك يمكن حذفها عند تطبيق المثال لترى تأثيرها :blink: )

بعد ذلك نتأكد من رقم العنصر الذى يتم رسمه الآن عن طريق الكود

If e.Index > -1 Then
'هنا سيتم العمل
End If

نقوم بتعريف بعض المتغيرات التى سنستخدمها

			'لتخزين العنصر الذى يتم رسمه
			Dim colorName As String = Me.ComboBox1.Items(e.Index)
			'لتحديد الأبعاد التى سنظهر اللون فيها
			Dim colorRect As New Rectangle(e.Bounds.X, e.Bounds.Y, 15, 15)
			'فرشاة سنستخدمها فى رسم العنصر المحدد
			Dim colorBrush As New SolidBrush(Color.FromName(colorName))
			'الخط الذى سنرسم به العنصر المحدد
			Dim selectionFont As New Font(Me.ComboBox1.Font, FontStyle.Bold)

تبدأ الآن عملية الرسم

أول شئ سنقوم برسمه هو مربع له خلفية باللون المكتوب بجانبه مثلا Red ومربع أحمر , Blue ومربع أزرق وهكذا

			e.Graphics.DrawRectangle(Pens.Black, colorRect)
			e.Graphics.FillRectangle(colorBrush, colorRect)

بعد ذلك يتم رسم نص العنصر وهو فى حالتنا هذه اسم اللون

نحن نريد أن يكون العنصر المحدد مختلف عن بقية العناصر

فى هذه الحالة يجب علينا التحقق من حالة العنصر عن طريق الكود

			If e.State And DrawItemState.Selected Then
			End If

نتأكد إذا كان العنصر محدد أم لا (فقط لإضافة بعض التأثيرات مثل لون الخلفية وتغيير نوع الخط وغير ذلك)

نقوم الآن برسم النص

هذا الكود لرسم العنصر المحدد

				e.Graphics.FillRectangle(colorBrush, e.Bounds)
				e.Graphics.DrawString(colorName, selectionFont, Brushes.Red, e.Bounds.X + 20, e.Bounds.Y)

وهذا لرسم العنصر الغير محدد

				e.Graphics.DrawString(colorName, Me.ComboBox1.Font, Brushes.Black, e.Bounds.X + 20, e.Bounds.Y)

فى نهاية الكود نقوم بتحرير الذاكرة من المتغيرات التى قمنا بتعريفها

			colorBrush.Dispose()
			selectionFont.Dispose()

الكود بالكامل

Public Class Form1

	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		Me.ComboBox1.DrawMode = DrawMode.OwnerDrawFixed

		For Each colorName As String In [Enum].GetNames(GetType(System.Drawing.KnownColor))
			Me.ComboBox1.Items.Add(colorName)
		Next
	End Sub

	Private Sub ComboBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem
		e.DrawBackground()
		If e.Index > -1 Then
			'لتخزين العنصر الذى يتم رسمه
			Dim colorName As String = Me.ComboBox1.Items(e.Index)
			'لتحديد الأبعاد التى سنظهر اللون فيها
			Dim colorRect As New Rectangle(e.Bounds.X, e.Bounds.Y, 15, 15)
			'فرشاة سنستخدمها فى رسم العنصر المحدد
			Dim colorBrush As New SolidBrush(Color.FromName(colorName))
			'الخط الذى سنرسم به العنصر المحدد
			Dim selectionFont As New Font(Me.ComboBox1.Font, FontStyle.Bold)

			e.Graphics.DrawRectangle(Pens.Black, colorRect)
			e.Graphics.FillRectangle(colorBrush, colorRect)

			If e.State And DrawItemState.Selected Then
				e.Graphics.FillRectangle(colorBrush, e.Bounds)
				e.Graphics.DrawString(colorName, selectionFont, Brushes.Red, e.Bounds.X + 20, e.Bounds.Y)
			Else
				e.Graphics.DrawString(colorName, Me.ComboBox1.Font, Brushes.Black, e.Bounds.X + 20, e.Bounds.Y)
			End If

			colorBrush.Dispose()
			selectionFont.Dispose()
		End If
	End Sub
End Class

تم تعديل هذه المشاركة بواسطة GHOST2010 في 7 يونيو 2009 في 15:59

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#2

أخي الفاضل

Ghost2010

بارك الله بك

فعلا مثال أكثر من رائع

لكن هنا السؤال الذي يطرح نفسة

ماذا لو اردنا ان نختار اللون المناسب من الكمبو بوكس لكي يتأثر النموذج او اي عنصر علي النموذج باللون المختار من الكمبو بوكس

ارفقت لك مثال يحتوي علي الكود الذي تفضلت وشرحتة

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

Coloring_Combobox.rar

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#3
اقتباس
لكن هنا السؤال الذي يطرح نفسة

ماذا لو اردنا ان نختار اللون المناسب من الكمبو بوكس لكي يتأثر النموذج او اي عنصر علي النموذج باللون المختار من الكمبو بوكس

بسيطة

زود الكود ده

	Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
		Try
			Me.BackColor = Color.FromName(Me.ComboBox1.Text)
		Catch ex As Exception
		End Try
	End Sub

Coloring_Combobox.rar

تم تعديل هذه المشاركة بواسطة GHOST2010 في 7 يونيو 2009 في 16:35

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#5

ماشى ياعم الكورة :P :P

انت غيرت اسمك ليه ياواد :blink: :blink:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#6

ولزيادة الخير خيرين

واللي عاوز يلون اللست بوكس بدلا من الفورم

شكرا لك

والله مثالك اكثر من رائع

Coloring_Combobox.rar

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#7

ربنا يكرمك ياعم محمد

إن شاء الله الدرس الجاى عن كيفية تلوين القوائم وشوية حركات كده :P :P

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

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