d مدونة الفريق – الصفحة 28 – مدونة فريق شركة المطورون بلس

Blog

  • إنشاء ملفات DOC & DOCX & PDF برمجيا في ASP.NET

    لا شك أنك في عملك المباشر مع مواقع ويب متوسطة إلى كبيرة أو في تطبيقات سطح مكتب، أن تتعرض لمشكلة إنشاء مستندات، مثلا شهادة أو فاتورة أو تقرير، ولا شك أن نوع الملف الهدف بالتأكيد سيكون إما وورد Microsoft Word  أو أكروبات Adobe PDF.

    الحديث في هذا المقال  عن المكتبات والحلول المجانية المتاحة، بعيدا عن المكتبات المدفوعة، فهي كثيرة ومتنوعة، فالمشكلة دائما في المجاني
    لكي نقوم بإنشاء ملف PDF هنالك العديد من المكتبات المتوفرة، أشهرها على الإطلاق مكتبة iTextSharp والأمثلة حولها متوفرة بكثرة على الإنترنت، ويجدر الإشارة هنا أن هذه المكتبة مفيدة لإنشاء تقرير ، أو فاتورة ، ولكن إذا أردت أن تنشئ ملفات أكثر تعقيد وترتيب وتنسيق ( مثلا شهادة ) سيتطلب منك الأمر الكثيرة من الكود، كذلك أي تعديل مستقبلا على الشهادة سيكلفك إعادة كتابة الكود مرة أخرى.

    لكي لا أطيل في موضوع الشهادة، الحل الأنسب يكون عبر عمل قالب ( ملف ) وورد DOC  وترتيبه ، ووضع مكان الحقول المراد تعبئتها قيم معينة يتم استبدالها برمجيا ، مثلا حقل الاسم يتم كتابته في الشهادة هكذا : XName ، ويتم لاحقا برمجيا استبدالها بالاسم الفعلي ، وهي أشبه بميزة دمج المراسلات الموجودة أساسا في الوورد.
    يمكن بعد إنشاء ملف الوورد تصديره وتحويله إلى PDF ، أو امتداد آخر مناسب.

    السؤال إذا ما هي حلول إنشاء ملفات وورد برمجيا ( أو التعديل ) ، شرط أن تكون هذه الطريقة مجانية
    الإجابة هنالك عدة حلول سأعرض أفضلها هنا
    أفضل وأسهل هذه الحلول هو استخدام مكتبة DocX وهي مكتبة مفتوحة المصدر موجودة على موقع CodePlex ، عبر هذا الرابط http://docx.codeplex.com
    يتوافر في الرابط نفسه  رابط لمدونة تضع أمثلة وحلول يمكن الاستفادة منها.
    هذه المكتبة توفر دالة بحث واستبدال، وهي المطلوبة لحل مشكلتنا، وقد هداني الله لهذا الحل بعد مدة لا بأس بها من المعاناة، حيث تقوم بعمل شهادة محترمة بالوورد، ووضع مكان الاسم أي اسم مثلا XName  ومكان اسم الدورة XCourse ، وتقوم باستبدال الاسم برمجيا وتوتة توتة توتة ، خلصت الحدوتة.

    ويا فرحة ما تمت هنالك مشكلة، وهي تصدير الملف إلى PDF ، هذه المكتبة لا تعطيك هذا الخيار، فقط هي تتيح لك إنشاء وتعديل ملفات الوورد.

    لا تقلق هنالك حل حيث تتواجد مكتبة Microsoft.Office.Interop.Word المتواجدة في حزمة مايكروسوفت أوفيس عند تنصيبهاـ وهي تتيح لك القيام بهذه الخطوة.
    نعلم أن الوورد فعليا له مكتبات تقوم بعمله، وهنالك واجهة تستدعي هذه المكتبات، ومكتبتنا هذه من المكتبات الأساسية ( هي الوورد نفسه ) ، تمكنك من فتح ملف الوورد برمجيا وحفظه باسم ، واختيار الامتداد الذي تريده، مثلا PDF أو HTML أو RTL ، وهذه ميزة رائعة.
    تجد هذه المكتبة متوافرة عند إضافة Referece  وتجد العديد من الشروحات حولها.

    سبب كتابتي لهذا المقال هو المشكلة التي سيواجهها المبرمج عند رفع العمل على السيرفر، أقصد رفع الموقع Publish، حيث ستظهر مشكلة.
    المشكلة بسيطة، وهي تخبرك بأن الأوفيس يجب أن يتم تنصيبه على السيرفر لتعمل المكتبة وهذا أمر منطقي.
    بعد تنصيب الأوفيس على السيرفر، يجب أيضا وضع هذه المكتبة في مجلد Bin  في مشروع ASP.NET  لتعمل بكفاءة، وحسب علمي هنالك حلول لتعمل بدون تنصيب الأوفيس كامل، لكن مع تقدمك في العمل، يصبح الوقت هام، وتبحث عن أسرع الحلول، فلا وقت تضيعه.

    ما طرأ فوق بحد ذاته مشكلة، فأنت غالبا لن تستطيع الوصول للسيرفر، لأنك تكون تملك استضافة عادية، وهنا يجب البحث عن حلول، قد تخبرني بأنك تملك سيرفر، ولكن العميل غالبا يشتري استضافته بنفسه، أو سيرفره بنفسه، ولا تريد دخول دوامة معه.
    إحدى الحلول الأخرى هو استخدام مكتبة Open XML SDK المجانية التي تقدمها مايكروسوفت نفسها، إلا أن هذه المكتبة للأسف لا تتيح لك تصدير إلى PDF ، فقط تتيح لك إنشاء ملفات doc & docx ، وهو للأسف أمر ليس جيد في حق مايكروسوفت.

    لكي لا أطيل، هنالك حل سحري جربته من القدم وما زال يعمل بكفاءة هو استخدام مكتبات GemBox.Document وهي مكتبة مدفوعة، ولكن النسخة المجانية منها تتيح لك التعامل مع ملفات وورد لغاية 20 فقرة، وهو أمر كافي لمشكلتنا ( تعديل على شهادة صفحة واحدة ) ، وانا بصراحة ألجأ لهذا الحل كثيرا.
    وحتى يكون المقال متنوع، أجد أشهر الحلول المدفوعة استخدام مكتبة Aspose.Words فهي قوية وبها خيارات كثيرة وسهلة الاستخدام، إلا أن ما يعيب هذه المكتبات سعرها الغالي نسبيا.
    وكعادتي أنبه بالابتعاد عن المكتبات المسروقة والمكركة، التزم بالحلال، وكن قابض على الجمر.
    بالتوفيق

  • تحويل النصوص إلى HTML صحيحة ومرتبة

    تحويل النصوص إلى HTML صحيحة ومرتبة
    كثيرا ما تكتب نصوصا عادية وتكون مرتبة في ملف نصي – على سبيل المثال – وتريد أن
    تستخدمها في الموقع كما تم ترتيبها ، ولكن تتفاجأ بأن النص لا يكون منسق لأنه ليس
    HTML ، بل نص عادي ، وهنا تقول لو لدي طريقة لتحول هذه النصوص إلى وسوم HTML مرتبة
    ، الحل هنا مع هذه المكتبة مكتبة MarkdownSharp تحويل النصوص إلى html  ،
    ويمكنك تحميل المصدر البرمجي أيضا من هنا مكتبة MarkdownSharp تحويل النصوص إلى html

    المكتبة بسيطة جدا وكلها تعتمد على دالة واحدة ، مع بعض الخصائص الجانبية، الدالة
    هذه تأخذ وسيطة النص المراد تحويله ، وتقوم بإعادة النص المحول إلى HTML  .

    قم بعمل صفحة وضع بها 2 صناديق نصية ، و أداة عنوان واحدة وزر

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

    
    Dim m As New MarkdownSharp.Markdown(True)
    Me.TextBox2.Text = m.Transform(Me.TextBox1.Text)
    Me.Label1.Text = Me.TextBox2.Text

    ستكون المخرجات في الصندوق النصي جاهزة لتستخدمها ، وفي أداة العنوان المثال
    للمشاهدة

    هذا مثال مباشر ، ولكن بدون أداة العنوان 
    مثال مباشر على التحويل

  • طريقة نقل بيانات من ملف Excel إلى قاعدة البيانات



    لنفترض أن لديك بيانات مخزنة في ملف إكسل وتريد نقلها إلى قاعدة البيانات …الطريقة سهلة وبسيطة

    1- ليكن ملف الإكسل التالي هو الملف الذي تريد نقل بياناته إلى قاعدة البيانات

    2- يجب في البداية أن تقوم بالاتصال بملف الإكسل لقراءة بياناته وتخزينها في Data Table   وسيكون بالطريقة التالية :

     

    Dim strConn As String strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Server.MapPath("../db/Book1.xls") & ";" & _ "Extended Properties=Excel 8.0;"
    Dim myCommand As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn)
    Dim dt As DataTable = New DataTable()
    myCommand.Fill(dt)

    ولا تنسى أن تستورد مجال الأسماء Imports System.Data.OleDb  

    وأيضا يجب أن تضع $ بعد اسم صفحة الإكسل وهي هنا sheet1 وذلك لأنها ليست اسم جدول

    3- الآن سيتم نقل بيانات الإكسل من ال Data Table التي تم تخزينها فيها إلى الجدول الخاص بها في قاعدة البيانات ولنفترض أنه باسم Users:

    Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("connstr").ConnectionString)
    Dim cmd As SqlCommand = conn.CreateCommand
    conn.Open()
    For i As Integer = 0 To dt.Rows.Count – 1
    cmd.CommandText = "insert into Users (userid,username) values(@userid,@username)"
    cmd.Parameters.AddWithValue("@userid", dt.Rows(i)("userid"))
    cmd.Parameters.AddWithValue("@username", dt.Rows(i)("username"))
    cmd.ExecuteNonQuery()
    cmd.Parameters.Clear()
    Next
    conn.Close()
    End Using
     

    وهكذا نكون قد انتهينا

  • بعض تصاميم المواقع المتجاوبة الجميلة

    استكمالا لففرة منير بركات حول تصميم الويب التفاعلي Responsive Web Desigen أضع لكم بعض المواقع الجميلة والجذابة

    أو بالأحرى ، بعض المواقع التي ستصدمك

    25 Beautiful Responsive Web Design Examples for Inspiration

    30 Example

    60 Examples of Responsive Website Design

    60+ Creative Examples of Responsive Web Design

    24 Excellent Examples of Responsive Web Design

  • هل انتهيت من برمجة موقعك ب ASP.NET وتريد فحص قبل نشره ؟

    عند الإنتهاء من برمجة موقع ، والتأكد من أن البرمجة لا تحتوي على أخطاء ، تحتاج لعمل مراجعات عديدة وهامة، مثلا توافقه مع محركات البحث، وجود روابط لا تعمل، دعمه للجوال وغيرها من هذه المراجعات والفحوصات الهامة ، ولكن من أين يبدأ المبرمج الغلبان ؟

    الإجابة من هذا الموقع
    http://webdevchecklist.com/asp.net/

    فكرة الموقع بسيطة ، وبالتأكيد ستعجبك وستعرف كيف تستخدمه

    بالتوفيق لكم

  • CheckBoxList Validation


    إن أدوات التحقق من أجمل ما تقدمه لنا مايكروسوفت في تطوير الويب ، ولكن هذه
    الأدوات بها نقص خفيف اتجاه بعض الأدوات الخاصة ، مثل أداة CheckBoxList وسأعرض عليك
    عزيزي القارئ أبسط حل لهذه المشكلة.

    عندما تريد إجراء تحقق من أداة CheckBoxList فإن الأمر لن ينجح معاك بالشكل المطلوب
    ، والحل بسيط جدا : ألا وهو استخدام أداة خاصة لهذا الغرض . وقد قمت بإرفاقها لكم
    على هذا الرابط
    CheckBoxListValidator

    قم باستدعاء الأداة في قائمة الأدوات ، ثم  اسحب الأداة واستخدمها كأي أداة
    تحقق عادية
    بالتوفيق للجميع

  • حفظ WindowsForm  في صورة وطباعتها

    قد يواجهنا في الحياة العملية أحيانا مشاكل غريبة، ولا يمكن إكمال المشروع إلا بتخطي هذه المشاكل سواء بطرق موجودة، أو بالالتفاف حولها بطرق قد تبدو غريبة للوهلة الأولى، وهذه الطريقة لنسخ النموذج احدى هذه الطرق الملتفة.

    واجهتنا مشكلة طباعة Form على الطابعة بأبعاد مختلفة مع تحديد هذه الأبعاد،  وإمكانية نقلها وطباعتها على طابعات مختلفة، وبعد التفكير توصلنا إلى عدة حلول وكان أبسطها وأقلها كلفة للوقت والجهد تحويل ال Form  لصورة وإمكانية التحكم في أبعادها لاحقا.

    بداية الأمر، استخدمنا شيفرة طباعة الشاشة، ومن ثم قمنا باقتصاص حجم الForm منها في صورة كالتالي

    Code

    Dim ScreenSize As Size = New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height) ‘ تحديد أبعاد الشاشة
    Dim screenCut As New Bitmap(Width, Height) ‘ تحديد أبعاد الصورة حسب أبعاد الفورم
    Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(screenCut) 
    g.CopyFromScreen(New Point(Location.X, Location.Y), New Point(0, 0), ScreenSize) ‘ حفظ الشاشة وتخزينها حسب بداية الفورم
    screenCut.Save("C:\mainimg.jpg", System.Drawing.Imaging.ImageFormat.Jpeg) ‘ حفظ الصورة

    الفكرة بسيطة وهي أن نقوم بطباعة كاملة للشاشة ، ثم نقوم باقتطاع صورة منها وتكون بداية هذه الصورة في نقطة بدء الForm وذلك عبر Location.X, Location.Y ومن ثم نحدد نقطة نهاية الصورة عبر طول وعرض النموذج الحالي، وأخيرا حفظ الصورة.
    تبقى قضية واحدة وهي تحديد أبعاد الصورة حسب أبعاد الطباعة المرادة، وذلك للحصول على أفضل أداء، وهنالك عدة طرق لهذا الأمر وأبسطها كالتالي

    Code

    Dim source As Image = Bitmap.FromFile("C:\screenCut .jpg")
    Using dest As New Bitmap(source, (source.Width + source.Width), (source.Height + source.Height))
    dest.Save("c:\newimg.jpg")
    End Using

    حيث يتم جلب الصورة الأولى وثمن ثم مضاعفة أبعادها بجمعها لنفسها مرة أخرى وذلك مثل الضرب في 2، ويمكن إضافة أي تمدد للصورة وذلك بالضرب في الرقم الذي ترغب به ، فمثلا أبعاد الصورة 300*300 ونحن نريدها 450*450 ، وهنا يجب ضرب الطول ب1.5 وكذلك العرض بنفس القيمة وهكذا.
    وما قمنا به هو نسخ الشاشة، ومن ثم اقتطاع النموذج منها، ومن ثم التحكم في أبعاد الصورة

    وفق الله الجميع

  • إضافة جافاسكريبت في حدث النقر على وسم كائن

    العنوان يبدو ملخبط نوعا ما، ولكن للتوضيح، لديك  كائن فلاش embed أو غيره، وتريد
    إضافة تعليمة جافا سكريبت في حدث النقر على الفلاش، مثلا فتح نافذة جديدة، هنالك خدعة
    بسيطة لعمل هذا الأمر وهي كالتالي:
    1- بعض المتصفحات لن تدعم الحدث onclick لذلك سنستخدم الحدث : onmousedown
    2- يجب وضع الخاصية wmode إلى transparent والخاصية allowscriptaccess إلى true

    وهذا مثال على ذلك

        <div onmousedown="javascript:window.open('http://www.tkfithat.com/Details.aspx?depid=166');"
    style="text-align: center; vertical-align: middle"> <embed wmode="transparent" allowfullscreen="false"
    allowscriptaccess="always" height="136" type="application/x-shockwave-flash"
    pluginspage="http://www.macromedia.com/go/getflashplayer" width="300"
    src="http://www.3orod.com/ImagesStore/AdsMedia/201102161044541826936843.swf"
    quality="high" wmode="transparent" />
    </div>

     

    وهنا قمت بجعل الكود يفتح صفحة جديدة عند النقر على كائن الفلاش، وهذا الفكرة الأساسية
    ، تستطيع الاستزادة مثلا بتخصيص نفس هذه الخصائص للوسم <object> هنا وضعت الوسم
    <embed> على سبيل المثال.

  • أفضل طريقة لتعلم لغة برمجة واحترافها

    أتعرف …أعتقد أنه عند قراءتك للعنوان …. للوهلة الأولى سيتبدى في ذهنك السؤال التالي: هل فعلا هناك طريقة جيدة ومثالية لتعلم لغة برمجة وأيضا احترافها؟؟

    أنا أقول لك وبكل ثقة نعم . ولم لا !! فالأمر ليس مستحيلا ولكن الأمر يحتاج بعض الاجتهاد والصبر لتنل ما تريد…إذا لنبدأ رحلتنا معا لتكتشف كيف يمكنك فعل ذلك ولتصل إلى الاحتراف الذي تتمناه.

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

    الآن أخبرني :

    إن كان لديك الرغبة في تعلم أمر معين في الحياة…مثل تعلم اللغة الإنجليزية أو قيادة السيارة أو تصليح الأجهزة الكهربائية وغيرها…ماذا تفعل ؟؟

    الجواب بسيط وأنت تعرفه جيدا …. ستخبرني بأنك ستقرأ كتبا عن الأمر الذي تريد تعلمه وبعدها ستحاول تطبيق ما قرأته لإتقانه يعني إن أردت تعلم اللغة الإنجليزية ستقوم بتعلم قواعد اللغة ومعانيها لكي تستطيع تكوين الجمل وبعد ذلك التحدث بها وبالاستمرار في ذلك ستحترف اللغة وستتكلم بها بطلاقة

    إذا…أنت تعرف الطريقة التي بها يمكنك تعلم لغة برمجة واحترافها….فتعلم لغة برمجة ستكون بنفس الطريقة التي تتعلم بها أي أمر آخر في حياتك.

    في البداية ستقوم بالبحث عن أفضل اللغات والتي تحمل الكثير من المزايا والإمكانيات الرائعة والتي ستلبي احتياجاتك في الحياة العملية. ولن أخبرك بها فيجب أن تقوم باكتشافها بنفسك لأنك في النهاية ستعتبرها وجهة نظر مني لا أكثر.أنت لديك عقل وتستطيع التفكير وبناء على قراءتك لمساوئ ومميزات كل لغة ستقرر أي لغة الأفضل لك .

    الآن لديك اللغة التي تريد تعلمها ولديك الرغبة القوية لذلك وأنا أؤكد على الرغبة كثيرا لأنه بدونها لن تكمل مشوارك في التعلم

    ستقوم بعد ذلك بقراءة كتب لتعلم قواعد اللغة ولا تقم بالقراءة كأنك تقرأ قصة أو مجلة للتسلية ولكن يجب عليك القراءة وتطبيق ما تقرأه بالموازنة فما نقرأه ننساه بسرعة ولكن ما نطبقه عمليا يظل محفورا في أذهاننا

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

    Dim x as integer

    ويتم كتابة نفس الأمر بلغة السي شارب بهذه الطريقة

    Int x;

    والأمر متشابه عند باقي لغات البرمجة وقس هذا الأمر على غيرها من الأوامر البرمجية..

    من هنا نستنتج أنك بتعلم لغة برمجة …تستطيع الانتقال بسهولة إلى أي لغة أخرى

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

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

    سيتطلب منك البحث كثيرا عبر الإنترنت لحل مشاكلك وهو أفضل مرجع لك للوصول إلى ما تتمناه ولا عيب بأن تطلب المساعدة بمن هو أكثر خبرة منك ومع حل كل مشكلة ستكتسب معرفة جديدة وبالمداومة على ذلك ستصبح خبيرا وسترى نتائج تعلمك.

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

    وأروع أمر هو بدون أدنى شك رؤيتك لنجاحك بعد تعبك وجهدك الذي استمر وقتا طويلا…ستغمرك السعادة والفرح عند انتهاءك من برنامج قد أخذ منك وقتا وجهدا كبيرا

    ترى أنت تتساءل لماذا أتكلم بهذه الثقة الكبيرة وكأنني مررت بهذه التجربة…أقول لك نعم..

    أنا أتكلم من تجربتي الشخصية التي مررت بها …وإلى الآن أتعلم أمورا جديدة في حياتي…فنحن مهما تعلمنا ستظل أمورا كثيرة لا نعرفها وسنظل نتعلم إلى الأبد.

    ومن يريد التعلم يبدأ من اليوم ولا يؤجل ذلك للغد وتمنياتي بالتوفيق لكل من سيبدأ باكرا

     

  • Auto-Implemented Properties جديد في منصة الدوت نت 4.0

    استكمالا لسلسة مقالات الجديد في منصة دوت  نت 4.0 سنقوم اليوم بالتطرق لميزة Auto-Implemented Properties الجديدة في منصة الدوت نت 4.0.

    في الإصدارات السابقة من الدوت نت تطلب الأمر منك إذا أردت أن تعرف خاصية Property  أن تعرفها بالشكل العام كالتالي:

    Code

    Private _name As String = "developers.ps"
    Property Name As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    حيث يتوجب أن يكون متغير خاص يتم تخزين به البيانات للتغليف ومن ثم إنشاء جسم الخاصية عبر الدالتين Set , Get  ومن ثم كتابة اللزم بهما.
    غالبا ما نقوم بإنشاء خصائص كما بالمثال بدون الإضافة عليها أي شيفرات برمجية أخرى، لذلك قامت مايكروسوفت بتسهل الأمر وعمله كالتالي:
    Code

    Property Name As String = "developers.ps"
    Property Age  As Integer = 2
    Property Employees As New List(Of Person)(12)

    الذي حصل هنا هو أن الدوت نت قامت بإنشاء المتغير الخاص في الخلفية وهو يحمل نفس اسم الخاصية بالإضافة للشرطة السلفية ، وأيضا يحمل نفس النوع ، ودليل على كلامي قم بمحاولة تعريف متغير خاص يحمل نفس اسم الخاصية ونفس نوعها واسمه يبدأ بالشرطة السفلية،وستجد أن إشارة الخطأ ستظهر لك .
    بإمكانك أن تنشئ الخاصية ReadOnly أو WriteOnly بنفس الطريقة أيضا، ولو أردت أن تفصل في جسم الخاصية وتضيف ما تريد إضافته ما عليك إلا كتابة كلمة Get أو Set  في السطر التالي للخاصية وستجد أن الفيجوال ستوديو يكملها عنك.

    تسهيل جديد من مايكروسوفت على المطورين ، وخطوة جيدة من قبلهم

    وفق الله الجميع