05-10-12, 01:12 PM
كاتب الموضوع : silverlight
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
مقدمـــــة:
من المؤكد أن قارئ هذا المقال فد سمع عن أو استخدم كلمة Enum من قبل في برامجه وتقريبا جميع NameSpaces الموجودة في الدوت نت يوجد بها Enum وأيضا قلما ما يخلو أي مشروع في الدوت نت من Enum .
وفي موضوعنا هذا سوف نركز علي كيفية الإستفادة من Enums الموجودة بالدوت نت.
ماهي Enum :
كلمة Enum هي إختصار متعارف عليه لكلمة Enumerations وهي عبارة عن ثوابت يتم تعريفها بواسطة المبرمج ومن ثم يستفيد بها بشكل ما من داخل برامجه وكلمة Enumerations تعادل كلمة التعدادات في اللغة العربية وهذا مجرد ترجمة حرفية ليس إلا ولكن التعريف الحقيقي لهذه الكلمة هو أن Enumerations عبارة عن ثوابت او متغيرات يتم وضعها معا في مجموعة ويطلق عليها إسم ما والكود التالي يوضح كيفية تعريف Enumerations
كود :
Public Enum Direction
Left
Right
Up
Down
End Enum
System.Drawing Namespace يوجد بها ContentAlignment , KnownColor, StringAlignment و غيرهم الكثير
System.Drawing.Drawing2D Namespace يوجد بها HatchStyle, SmoothingMode, DashCap و غيرهم الكثير
System.Windows.Forms Namespace يوجد بها AnchorStyles, BorderStyle, ButtonState وغيرهم الكثير
عموما جميع الأمثلة أعلاه تؤكد شئ واحد فقط أنه لايمكن بأي حال من الأحوال الإستغناء عن Enums
كيف نستفيد من Enum :
الأمثلة التالية توضح كيفية الإستفادة من Enum في برامجنا
ولكي نستفيد أكثر من الأمثلة التي سوف نعطيها سأحاول أن أبني بعض الكونترول التي من الممكن أن نستفيد منها بشكل أكثر فعالية
المثال الأول:
فضاء الأسماء System.Drawing Namespace يوجد بها Enumerations التالية
ContentAlignment
StringAlignment
الكود التالي يوضح كيفية الإستفادة من كل منهما في بناء كونترول بسيط جدا مثل Label Control ولكنه شفاف ....... ويمكن استخدامه بسهولة ...... في برامجكم
عموما لن أناقش الكود الخاص بهذا الكونترول بشكل كامل ولكن ما يهمني هنا هو أن تلاحظوا كيف تم الاستفادة من Enum في تغيير شكل الكونترول عن طريق الإستفادة من الثوابت الموجودة في كل من ContentAlignment Eum و أيضا StringAlignment Enum والجزء التالي من الكود يوضح الأمر
كود :
If Me.Text IsNot Nothing Then
Dim format As New StringFormat()
format.LineAlignment = StringAlignment.Center
format.Trimming = StringTrimming.EllipsisCharacter
Select Case Me._textAlign
Case ContentAlignment.BottomCenter
format.Alignment = StringAlignment.Center
format.LineAlignment = StringAlignment.Far
Exit Select
Case ContentAlignment.BottomLeft
format.Alignment = StringAlignment.Near
format.LineAlignment = StringAlignment.Far
Exit Select
Case ContentAlignment.BottomRight
format.Alignment = StringAlignment.Far
format.LineAlignment = StringAlignment.Far
Exit Select
Case ContentAlignment.MiddleCenter
format.Alignment = StringAlignment.Center
format.LineAlignment = StringAlignment.Center
Exit Select
Case ContentAlignment.MiddleLeft
format.Alignment = StringAlignment.Near
format.LineAlignment = StringAlignment.Center
Exit Select
Case ContentAlignment.MiddleRight
format.Alignment = StringAlignment.Far
format.LineAlignment = StringAlignment.Center
Exit Select
Case ContentAlignment.TopCenter
format.Alignment = StringAlignment.Center
format.LineAlignment = StringAlignment.Near
Exit Select
Case ContentAlignment.TopLeft
format.Alignment = StringAlignment.Near
format.LineAlignment = StringAlignment.Near
Exit Select
Case ContentAlignment.TopRight
format.Alignment = StringAlignment.Far
format.LineAlignment = StringAlignment.Near
Exit Select
End Select
Using textBrush As New SolidBrush(MyBase.ForeColor)
e.Graphics.DrawString(MyBase.Text, MyBase.Font, textBrush, borderRect, format)
End Using
End If
كود :
Private Function GetImageRectangle(ByVal img As Image, ByVal rect As Rectangle, ByVal align As ContentAlignment) As Rectangle
Dim imageSize As Size = img.Size
Dim x As Integer = (rect.X + 2)
Dim y As Integer = (rect.Y + 2)
If ((align And (ContentAlignment.BottomRight Or (ContentAlignment.MiddleRight Or ContentAlignment.TopRight))) <> DirectCast(0, ContentAlignment)) Then
x = (((rect.X + rect.Width) - 4) - imageSize.Width)
ElseIf ((align And (ContentAlignment.BottomCenter Or (ContentAlignment.MiddleCenter Or ContentAlignment.TopCenter))) <> DirectCast(0, ContentAlignment)) Then
x = (rect.X + ((rect.Width - imageSize.Width) / 2))
End If
If ((align And (ContentAlignment.BottomRight Or (ContentAlignment.BottomCenter Or ContentAlignment.BottomLeft))) <> DirectCast(0, ContentAlignment)) Then
y = (((rect.Y + rect.Height) - 4) - imageSize.Height)
ElseIf ((align And (ContentAlignment.TopRight Or (ContentAlignment.TopCenter Or ContentAlignment.TopLeft))) <> DirectCast(0, ContentAlignment)) Then
y = (rect.Y + 2)
Else
y = (rect.Y + ((rect.Height - imageSize.Height) / 2))
End If
Return New Rectangle(x, y, imageSize.Width, imageSize.Height)
End Function
الأكواد الموجودة بالمثال الأول يمكن الإستفادة منها أيضا في تطوير الكود الموجود في المقال الموجود تحت اللينك التالي ..........
كود : باتون شفاف
ملاحظات هامة :
الكود الموجود بالمرفقات بنسخة الفيجوال استوديو 2010
وفي المشاركة التالية سوف أضع الكود كاملا الخاص بالكونترول لكي يستفيد منه من لا يملكون نسخة الفيجوال 2010
أيضا في المشاركات اللاحقة سوف نناقش كيف نستفيد أكثر من Enum و بطرق أخري مختلفة ............
تقبلوا تحياتي ولا تنسونا في دعائكم..............
أخوكم عمر