تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مقال- أفكار في الدوت نت Enum
#1
كاتب الموضوع : silverlight

بسم الله الرحمن الرحيم


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

مقدمـــــة:

من المؤكد أن قارئ هذا المقال فد سمع عن أو استخدم كلمة Enum من قبل في برامجه وتقريبا جميع NameSpaces الموجودة في الدوت نت يوجد بها Enum وأيضا قلما ما يخلو أي مشروع في الدوت نت من Enum .
وفي موضوعنا هذا سوف نركز علي كيفية الإستفادة من Enums الموجودة بالدوت نت.

ماهي Enum :

كلمة Enum هي إختصار متعارف عليه لكلمة Enumerations وهي عبارة عن ثوابت يتم تعريفها بواسطة المبرمج ومن ثم يستفيد بها بشكل ما من داخل برامجه وكلمة Enumerations تعادل كلمة التعدادات في اللغة العربية وهذا مجرد ترجمة حرفية ليس إلا ولكن التعريف الحقيقي لهذه الكلمة هو أن Enumerations عبارة عن ثوابت او متغيرات يتم وضعها معا في مجموعة ويطلق عليها إسم ما والكود التالي يوضح كيفية تعريف Enumerations


كود :
Public Enum Direction
Left
Right
Up
Down
End Enum
أيضا علي سبيل المثال لا الحصر فضاء الأسماء التالية يوجد بها عدد لا بأس به من Enumerations

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
أيضا الكود التالي يوضح كيفية تحديد مكان المستطيل الذي يتم من خلاله رسم صورة علي الكونترول وذلك عند تغير القيم الخاصة بالمتغيرات الموجودة داخل Enum ContentAlignment


كود :
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 و بطرق أخري مختلفة ............

تقبلوا تحياتي ولا تنسونا في دعائكم..............

أخوكم عمر


الملفات المرفقة
.rar   Enums_example1_src.rar (الحجم : 129.29 ك ب / التحميلات : 80)
}}}
تم الشكر بواسطة: Anas Mahmoud


الردود في هذا الموضوع
مقال- أفكار في الدوت نت Enum - بواسطة Raggi Tech - 05-10-12, 01:12 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 6,331 30-07-21, 05:14 PM
آخر رد: kebboud
  مقال: الكومبو بوكس ComboBox كيف تضيف أيقونات Blue Sky 1 3,437 30-06-19, 10:41 AM
آخر رد: invocker
  التــعامل مع cmd من خلال الدوت نت مبتدئ في الاحتراف 3 4,028 02-06-18, 12:36 AM
آخر رد: YousefOkasha
  أفكار في الجرافكس AlignRectangle silverlight 0 1,709 14-10-17, 02:02 PM
آخر رد: silverlight
  تفقيط الارقام فى الدوت نت مبرمج أوتار 17 13,395 20-04-17, 12:21 PM
آخر رد: محمد بوقزاحة
  [مقال] تشغيل برمجيات الدوت نت بدون تنصيب النت فروم ويرك m0075 13 11,079 13-02-14, 08:29 PM
آخر رد: Omar Mekkawy
  مقال- كيفية الاستغناء عن الداتا بيز التقليدية في برامجنا – ألجزء الأول RaggiTech 1 3,676 06-10-12, 12:23 AM
آخر رد: RaggiTech
  مقال- تطوير الكونترول Property Attributes الجزء الثالث RaggiTech 0 2,461 06-10-12, 12:20 AM
آخر رد: RaggiTech
  مقال- تطوير الكونترول Skin Control RaggiTech 0 2,614 06-10-12, 12:08 AM
آخر رد: RaggiTech
  مقال- كيف تصنع ملفات المساعدة Help Files وتربطها مع برنامجك RaggiTech 0 3,406 05-10-12, 07:30 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم