تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الفصل(3): التركيبات أنواعها واستخداماتها
#1
السلام عليكم إخواني الكرام
كيف حالكم ؟

هذا الموضوع ملك للأستاذ Mohammed Asaad وقد طلبت منه أن أنقل مشاركاته ووافق بحمد اللهSmile

السلام عليكم ورحمة الله وبركاته
بسم الله الرحمن الرحيم
درسنا اليوم دسم بعض الشيء ويحتاج لشيء من التركيز.
بداية علينا أن نتيقن أن الأنواع في فيجوال بسيك دوت نت لا تقتصر على ما قد طور مع اللغة مثل short int16 int32 single short integer string date point .......إلخ
فربما احتاج أنواع جديدة من المتغيرات والثوابت التي لا تتواجد في فيجوال بيسك دوت نت....لا مشكلة.....اصنعها بنفسك!

سيحتوي الدرس باذن الله على التالي:
  • التركيبات من نوع Enums
  • التركيبات من نوع Structure
أولا: التركيبات من نوع Enums
بالنسبة للتركيبات من نوع Enums فهي تستخدم لتعريف أنواع جديدة من التركيبات على وجه الحصر أو التعميم ....كيف ذلك؟؟!
كما نعرف في السنة 12 شهرًا وبما ان عددها ثابت فيمكننا اختصار جهد تكرارها في الشيفرة كالتالي:

كود :
Enum Month
          Jan
          Feb
          Mar
          Apr
          May
          Jun
          Jul
          Aug
          Sep
          Oct
          Nov
          Dec
End Enum

لكن ما الذي حدث وما استفيد؟؟
انظر أخي الكريم:
لقد قمنا بصنع تركيبة جديدة واسميناها بالشهر ووضعنا كل شهر داخل التركيبة كجزء منها....
وماذا بعد...؟
الآن علينا معرفة بعض الأمور:

.عند الاستعلام عن عنصر من عناصر الEnum فاننا نستعلم بالشكل التالي:

كود :
TextBox1.Text =Month.Jan


[ATTACH=CONFIG]188[/ATTACH]

وبما أن الثابت Month.Jan لم يتم اسناد قيمة له فسيتم اسناد القيمة الافتراضية له وهي صفر ..لماذا؟
العنصر الأول من عناصر تركيبة الEnum تبدأ من الصفر والعنصر الثاني يساوي السابق+1 والثالث يساوي السابق+1 وهكذا إلى أن نصل إلى العنصر Month.Dec فسنراه يحمل القيمة 11 ولك التجربة
.يمكن اسناد قيم وقت صنع التركيبة كالتالي:
كود :
Enum Month
          Jan = 22
          Feb = 5
          Mar = 23
          Apr
          May
          Jun
          Jul
          Aug
          Sep
          Oct
          Nov
          Dec
End Enum
كود :
[color=#000000][FONT=arial][b]      TextBox1.Text =Month.Mar[/b][/FONT][/color]
[ATTACH=CONFIG]189[/ATTACH]

وكما نرى فان العنصر Month.Mar يحمل القيمة 23 والعنصر التالي سيحمل القيمة السابقة + 1 حسب ما ذكرنا في الأعلى .

كود :
[color=#000000][FONT=arial][b] TextBox1.Text =Month.Apr[/b][/FONT][/color]
[ATTACH=CONFIG]190[/ATTACH]

ملاحظة: يمكننا الجزم بأن التركيبات من نوع Enum تعادل بوظيفتها الثوابت فعناصرها عبارة عن ثوابت ولهذا عند محاولة اسناد قيم للعنصر خارج سطره في التركيبة فان ذلك سيتوج بالرفض من قبل المترجم........انظر الصورة التالية:


[ATTACH=CONFIG]191[/ATTACH]

ونص رسالة الخطأ يقول:Constant cannot be the target of an assignment أي أنه الثابت لا يمكن أن يكون هدفا لعملية تعيين.(أي اسناد قيمة)
اذن يمكن استخدام الEnum في استخدامات الثوابت والتي يمكنك مراجعتها من الموضوع التالي:

" المشاركة تم تحريرها " الرابط لايعمل وسيتم تعديله بعدما يتم نسخ موضوعه من المنتدى القديم

http://vb4arab.com/vb/showthread.php?t=36557

ملاحظة : جميع قيم الEnum في المثالين السابقة من النوع Integer كما يمكن تغيير نوعها لLong او Short او ما الى ذلك(أقصد المتغيرات العددية الصحيحة)
مثال:


كود :
[b]Enum Month As Long[/b]
[b]Jan[/b]
[b]Feb[/b]
[b]....[/b]
[b]....[/b]
[b] End Enum[/b]


والآن دعونا نتطرق قليلا الى موضوع مرتبط بالمتغيرات والثوابت ألا وهو محدودية المتغيرات والثوابت (بمعني آخر أين يمكنني استخدامها) .... يمكنك تحديد محدودية الEnum كالتالي:
عندما تريد الEnum عامة ومستخدمة من جميع وحدات المشروع عليك سبقها ب Public أو بلا شيء
مثال:

كود :
Public Enum Month As Long
Jan
Feb
....
....
End Enum

أو

كود :
[b]Enum Month As Long[/b]
[b]Jan[/b]
[b]Feb[/b]
[b]....[/b]
[b]....[/b]
[b] End Enum[/b]
وإن كنت حصرها داخل الوحدة البرمجية المعلنة بها فعليك سبقها ب Private
مثال:
كود :
Private Enum Month As Long
Jan
Feb
....
....
End Enum

ملاحظة أخيرة: علينا وضع التركيبة خارج أي حدث لان ذلك سوف يحدث خطأ برمجي:
مثال:

كود :
Public Class Form1
'لا مشكلة
     Enum Month
        Jan
        Feb
        Mar
        Apr
....
....
End Enum


كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'هنا المشكلة
Enum Month
        Jan
        Feb
        Mar
        Apr
....
....
End Enum
End Sub



___________________________________
ثانيا: التركيبات من نوع Structure
يعرف هذا النوع من التركيبات بالانواع المعرفة من قبل المستخدم(User Defined Type-UDT)
ويمكن دمج العديد من المتغيرات والتركيبات داخل التركيبة الأم باستخدام الكلمة المحجوزة Structure
نعرف انه لدينا متغيرات من النوع String و Integer وDate وما الى ذلك.
لكن هل يمكنني صياغة متغير بالكيفية التي اريدها....لم لا؟
هذا النوع من المتغيرات يسمى Structure والتي دعمت ببيئة الدوت نت اكثر من ذي قبل
الآن نريد صنع متغير من نوع سيارة اي صنع خاص لا يعرفه فيجوال بيسك دوت نت...لكن قبل ذلك علينا تحديد العناصر التي تدخل في مكونات السيارة وهي الاسم والموديل والسعر والسعة وتاريخ الصناعة وتاريخ التصدير..... وما الى ذلك

مثال:

كود :
Structure Car
        Dim Name As String
        Dim cost As Integer
        Dim Model As String
End Structure



استخدام المتغير الجديد بالضبط كاستخدام المتغير العادي
مثال:

كود :
Dim NewCar As Car
        NewCar.Name = "Mercedes"
        NewCar.cost = 15
         'طبعا انا ما بعرف ايش موديلاتها بس للتوضيح مش اكثر
        NewCar.Model = "Gaosdh/#25"


        MsgBox("Name: " & NewCar.Name & vbCrLf & "Cost: " & (NewCar.cost).ToString & vbCrLf & "Model: " & NewCar.Model

والناتج من هذه العملية:

[ATTACH=CONFIG]192[/ATTACH]

لعلك لاحظت شيئا: عندما قمنا بربط المعطيات داخل الرسالة فان الجزء NewCar.Cost الحقناه بالدالة .ToString ......ما وظيفتها...؟!
عندما قمنا بربط نصوص في محتوى الرسالة رأينا أن هناك معطى يلزم ربطه لكنه خارج عن الجماعة(جماعة النصوص) ولكي يتم التلاءم قمنا بتطبيق الدالة ToString عليه والتي تقوم بتحويل المعطى من قيمة عددية الي نصية ليتم الربط بسلام (يمكن تشبيهها بالدالة Str()) في لغة الفيجوال بيسك 6




الآن دعونا نتعمق أكثر
يمكن للتركيبة من Structure أن تحتوي على تراكيب داخلية الأمر الذي يطلق عليه تراكيب متداخلة
Nested Structures
كيف ذلك ولماذا..؟
الآن دعنا نرجع قليلا الى السيارة ...نريد ألحاق مكون آخر للسيارة وهو تاريخ الانتاج وتاريخ التصدير..هل يتوجب علينا جعل كل مكون منفصلا عن الآخر؟
ليس تماما .. كما نعلم فان كلا المكونين من النوع Date والذي يمكن اجماله بالشكل التالي:

كود :
Structure Car

        Dim Name As String
        Dim cost As Integer
        Dim Model As String
  
      Structure DateOfx
            Dim Produce As Date
            Dim Export As Date
        End Structure


Dim DateOf As DateOfx
ما الذي حدث؟
الآن قمنا بادخال تركيبة التواريخ داخل تركيبة مكونات السيارة والذي يمكن استخدامه بالصورة التالية:

كود :
Dim NewCar As Car
        NewCar.Name = "Mercedes"
        NewCar.cost = 15
        NewCar.Model = "Gaosdh/#25"
        NewCar.Dateof.Produce = #11/29/2003#
        NewCar.Dateof.Export = #11/29/2005#


        MsgBox("Name: " & NewCar.Name & vbCrLf & "Cost: " & (NewCar.cost).ToString & vbCrLf & "Model: " & NewCar.Model & vbCrLf & "DateOf Produce: " & NewCar.Dateof.Produce & vbCrLf & "DateOf Export: " & NewCar.Dateof.Export
والناتج:




كما يمكننا تضمين أحداث داخل التركيبة والتي ساوجزها وساخصص للاحداث فصل كامل ان شاء الله
مثال بسيط:

كود :
Structure Car
      
        Structure DateOfx
            Dim Produce As Date
            Dim Export As Date
        End Structure
  
     Dim Name As String
        Dim cost As Integer
        Dim Model As String
        Dim Dateof As DateOfx
        
Sub CloseForm(ByVal frm As Form)
        frm.Close()
End Sub


End Structure

ويستخدم كالتالي:

كود :
NewCar.CloseForm(Me)

الذي حصل اننا صنعنا حدث أو اجراء يقوم باغلاق النموذج الذي تم تمريره وهنا مررنا للاجراء النموذج Me وهو النموذج قيد التطوير

بهذا نكون قد انهينا درسنا لهذا اليوم ان شاء الله
بانتظار القادم باذن الله

Lo2i و Mohammed Asaad



الملفات المرفقة صورة/صور
                   
اللَّهُمَّ أَنْتَ رَبِّي ، لا إِلَه إِلاَّ أَنْتَ خَلَقْتَني وأَنَا عَبْدُكَ ، وأَنَا على عهْدِكَ ووعْدِكَ ما اسْتَطَعْتُ ، أَعُوذُ بِكَ مِنْ شَرِّ ما صنَعْتُ ، أَبوءُ لَكَ بِنِعْمتِكَ علَيَ ، وأَبُوءُ بذَنْبي فَاغْفِرْ لي ، فَإِنَّهُ لا يغْفِرُ الذُّنُوبِ إِلاَّ أَنْتَ .
الرد }}}
تم الشكر بواسطة: عبد الله , Amir_Alzubidy , Amir_Alzubidy
#2
جزاكم الله خيرا
بارك الله فيك وفي علمك
الرد }}}
تم الشكر بواسطة:
#3
وعليكم السلام ورحمة الله
اخي الكريم ارجو ان تتقبل ملاحظتي
الاول : في تركيب enum
لديك خطأ في الكتابة وهو
وبما أن الثابت Month.Jan لم يتم اسناد قيمة له فسيتم اسناد القيمة(( الافتراشية)) له وهي صفر ..لماذا؟
الثاني : في تركيبة enum
وهو ان الرابط لا يعمل http://vb4arab.com/vb/showthread.php?t=36557

بارك الله فيك اخي وقد افدتني كثيرا
وارجو ان تتقبل مروري
الرد }}}
تم الشكر بواسطة:
#4
الرد }}}
تم الشكر بواسطة:
#5
abdoojh كتب :وعليكم السلام ورحمة الله
اخي الكريم ارجو ان تتقبل ملاحظتي
الاول : في تركيب enum
لديك خطأ في الكتابة وهو
وبما أن الثابت Month.Jan لم يتم اسناد قيمة له فسيتم اسناد القيمة(( الافتراشية)) له وهي صفر ..لماذا؟
الثاني : في تركيبة enum
وهو ان الرابط لا يعمل http://vb4arab.com/vb/showthread.php?t=36557

بارك الله فيك اخي وقد افدتني كثيرا
وارجو ان تتقبل مروري

يعطيك العافية على هذه الملاحظات " فهذا الخطأ ليس مني " Smile
وجاري التعديل
اللَّهُمَّ أَنْتَ رَبِّي ، لا إِلَه إِلاَّ أَنْتَ خَلَقْتَني وأَنَا عَبْدُكَ ، وأَنَا على عهْدِكَ ووعْدِكَ ما اسْتَطَعْتُ ، أَعُوذُ بِكَ مِنْ شَرِّ ما صنَعْتُ ، أَبوءُ لَكَ بِنِعْمتِكَ علَيَ ، وأَبُوءُ بذَنْبي فَاغْفِرْ لي ، فَإِنَّهُ لا يغْفِرُ الذُّنُوبِ إِلاَّ أَنْتَ .
الرد }}}
تم الشكر بواسطة: Amir_Alzubidy , alsouf


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الفصل(8): الدوال والاجراءات B3dak Hbebe 3 19,655 15-08-18, 09:20 AM
آخر رد: nagoma
  الفصل(9):مدخل الى الفئاتClasses - الجزء الأول B3dak Hbebe 5 4,327 30-05-17, 01:09 PM
آخر رد: ali hussein
  الفصل(5):صنع القرار...الجزء الأول-الجمل الشرطية Omar Mekkawy 4 4,166 10-08-13, 05:39 PM
آخر رد: Omar Mekkawy
  الفصل (1) : الفيجوال بيسك دوت نت (لمحة تعريفية) Omar Mekkawy 2 3,492 27-07-13, 02:39 PM
آخر رد: green.grass52
  الفصل (0) : دورة تعلم معنا فيجوال بيسك دوت نيت Omar Mekkawy 7 4,821 18-07-13, 06:29 PM
آخر رد: el@nsary
  الفصل(16): مدخل لمسارات التنفيذ Threading B3dak Hbebe 3 3,778 27-04-13, 10:58 AM
آخر رد: خليل اسماعيل
  الفصل(15): الفئتان Stack و Queue B3dak Hbebe 2 3,222 27-04-13, 09:20 AM
آخر رد: خليل اسماعيل
  الفصل(12): Oop بالتفصيل...الجزء الثاني B3dak Hbebe 3 3,900 27-04-13, 09:16 AM
آخر رد: خليل اسماعيل
  الفصل (11) :oop بالتفصيل ..الجزء الاول Easy4ever 3 3,568 27-04-13, 09:08 AM
آخر رد: خليل اسماعيل
  الفصل(10):مدخل الى الفئات..الجزء الثاني B3dak Hbebe 2 3,204 27-04-13, 08:59 AM
آخر رد: خليل اسماعيل

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


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