تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
للمنتقلين حديثاً- اكتشف My Namespace
#1
كاتب الموضوع : Islam Ibrahim

بيئة التطبيق:
Visual Studio 2005
Visual Studio 2008

من المشاكل الكبيرة التي تواجه المطورين في الدوت نت هو تعدد وتنوع فئات إطار العمل, الأمر الذي يعني صعوبة تحديد الفئة المناسبة من أجل أداء الوظيفة المناسبة, ويجعل كذلك بعض المبرمجين خصوصاً المنتقلين من vb6 إلى التفكير في استخدام دوال API, والأمر الذي يجعلهم يقومون بذلك هو صعوبة إيجاد الفئة التي يجب استخدامها للقيام بمهامهم البرمجية, لذلك عملت مايكروسوفت على تقديم الإضافة الجديدة والممثلة في مجال الإسم My (My Namespace) والذي يوفر تعاملاً مرنا وسريعا مع مختلف فئات الدوت نت الهامة والتي تؤدي الأغراض الأساسية مثل التعامل مع نظام الملفات, والتفاعل مع مستخدم البرنامج, والتعامل مع موارد البرنامج Resources, وغيرها الكثير...

رائع! ألا يبدو ذلك مثيراً حقاَ؟ لنجرب ذلك بشكل سريع. -- كثيراً ما يطرح السؤال التالي: "كيف أعرف متغيراً نصياً وأضع فيه محتويات ملف نصي محدّد؟". سيكون الجواب بالنسبة لإصدارات سابقة من .NET Framework كما يلي:


كود :
[color=#000000][COLOR=#0000bb]Dim sr [/color][color=#007700]As New [/color][color=#0000bb]IO[/color][color=#007700].[/color][color=#0000bb]StreamReader[/color][color=#007700]([/color][color=#dd0000]"c:\mytextfile.txt"[/color][COLOR=#007700])
[/COLOR][color=#0000bb]contents [/color][color=#007700]= [/color][color=#0000bb]sr[/color][color=#007700].[/color][COLOR=#0000bb]ReadToEnd
sr[/COLOR][color=#007700].[/color][color=#0000bb]Close[/color][COLOR=#007700]()  
[/COLOR][/COLOR]

لكن مع استخدام الاختصار My في إصدار Visual Basic 2005 ومابعده, يمكن تنفيذ كل تلك الخطوات من الكود في سطر واحد كمايلي:


كود :
[color=#000000][COLOR=#0000bb]Dim contents [/color][color=#007700]As [/color][color=#0000bb]String [/color][color=#007700]= [/color][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]Computer[/color][color=#007700].[/color][color=#0000bb]FileSystem[/color][color=#007700].[/color][color=#0000bb]ReadAllText[/color][color=#007700]([/color][color=#dd0000]"c:\mytextfile.txt"[/color][COLOR=#007700])  
[/COLOR][/COLOR]

الفئة My.Computer.FileSystem مجرد واحدة فقط من الفئات المضمنة في مجال الأسماء My, ويمكن التعامل مع بقية تلك الفئات بنفس الكيفية السابقة! سطر واحد من الكود!!

لنستكشف معاً My

تقدم My عدة فئات مميزة التي تنظم مجموعة متنوعة من الوظائف الشائعة الاستخدام في سبعة مجالات عامة: My.Application My.Computer, My.Forms, My.Resources, My.Settings, My.User و My.WebServices, سنتعرف عليها فيما يلي.

عامة, تقدم My وصولاً سهلاً إلى مجموعتين من الأغراض, الأولى تختص بالفئات التي تقدمها .NET Framework والمجموعة الثانية خاصة بالتطبيق ومعالجة محتوياته والتعامل معه, بخصوص المجموعة الأولى فهي ممثلة بالفئات My.Application, My.Computer, My.User بينما المجموعة الثانية تمثل بالفئات My.Forms, My.Resources, My.Settings, My.WebServices,

وكما ذكرت سابقاً, فإنه من الصعب العثور على الميزة المناسبة في .NET Framework والوصول إليها ليس المشكلة الوحيدة, وبالرغم من أنك قد تجد الفئة المناسبة إلا أنك تكون وفتها غير مدرك للخطوات التي يجب تنفيذها لاستخدام الفئة بالشكل المناسب والمرغوب فيه, مثل تمرير البارامتر لمنشئ فئة معينة Class Constructor, واستلزام كتابة عدة سطور لأجل أداء غرض واحد, مع إمكانية صعوبة فهم الكود بشكل صحيح, لذلك صممت My بالشكل الذي يسمح لك بالوصول المباشر للوظيفة التي ترغب بها, وجعلها جاهزة للعمل.

My.Application

تقدم الفئة My.Applicationللمطورين, ترتيب ذكي جداً للمعلومات والخدمات الخاصة بالتطبيق, والعناصر الفرعية التابعة للفئة My.Application مايلي:

AssemblyInfo: وتعيد معلومات حول اسم التطبيق وحقوقه Copyright, والوصف الخاص به Description.

OpenForms: وتعيد مجموعة النماذج المفتوحة اثناء تشغيل البرنامج.

Log: وهو ميزة قوية لتسجيل الاستثناءات داخل سجل التطبيق, وهو الأسهل على الإطلاق في تحرير سجل التطبيق, ويمكن استخدامه كما يلي:

كود :
[color=#000000][COLOR=#0000bb]Dim winINIFile [/color][color=#007700]As [/color][COLOR=#0000bb]String
[/COLOR][COLOR=#007700]Try
    [/COLOR][color=#0000bb]winINIFile [/color][color=#007700]= [/color][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]Computer[/color][color=#007700].[/color][color=#0000bb]FileSystem[/color][color=#007700].[/color][color=#0000bb]ReadAllText[/color][color=#007700]([/color][color=#dd0000]"c:\windows\wind.ini"[/color][COLOR=#007700])
Catch [/COLOR][color=#0000bb]ex [/color][color=#007700]As [/color][color=#0000bb]IO[/color][color=#007700].[/color][COLOR=#0000bb]FileNotFoundException
    My[/COLOR][color=#007700].[/color][color=#0000bb]Application[/color][color=#007700].[/color][color=#0000bb]Log[/color][color=#007700].[/color][color=#0000bb]WriteException[/color][color=#007700]([/color][color=#0000bb]ex[/color][color=#007700], [/color][color=#0000bb]TraceEventType[/color][color=#007700].[/color][color=#0000bb]Error[/color][COLOR=#007700],
        [/COLOR][color=#dd0000]"Error Accessing INI File"[/color][COLOR=#007700])
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]Try  
[/COLOR][/COLOR]

ومن الأمور الشائعة البحث بين مستخدمي vb6 وما قبلها من إصدارات: يمكن الإجابة عليها من خلال الإضافة Openforms القادمة مع My, هذه الميزة والموجودة ضمن vb6 من خلال ال Forms Keyword تمكنك من الوصول إلى النوافذ المفتوحة دون المرور على كافة نوافذ تطبيقك ومعاينتها كما يلي:


كود :
[color=#000000][COLOR=#007700]For [/color][color=#0000bb]Each f [/color][color=#007700]As [/color][color=#0000bb]Form In My[/color][color=#007700].[/color][color=#0000bb]Application[/color][color=#007700].[/color][COLOR=#0000bb]OpenForms
    Debug[/COLOR][color=#007700].[/color][color=#0000bb]WriteLine[/color][color=#007700]([/color][color=#0000bb]f[/color][color=#007700].[/color][color=#0000bb]Text[/color][COLOR=#007700])
    [/COLOR][color=#0000bb]f[/color][color=#007700].[/color][color=#0000bb]WindowState [/color][color=#007700]= [/color][color=#0000bb]FormWindowState[/color][color=#007700].[/color][COLOR=#0000bb]Minimized
Next  
[/COLOR][/COLOR]

My.Computer و My.User

يساعدك My.Computer على استكشاف الخدمات والمعلومات الخاصة والمرتبطة بجهاز الكميوتر الذي سيستضيف تطبيقك, على سبيل المثال, يمكن استخدام العناصر الموجودة داخل My.Computer لنسخ جميع الصور الموجودة داخل المجلد My Pictures الخاص بالمستخدم الحالي إلى مجلد آخر, وليكن C:\Desktop Wallpapers مع عرض مربع النسخ الخاص بويندوز.


كود :
[color=#000000][COLOR=#0000bb]Dim myPics [/color][color=#007700]As [/color][color=#0000bb]String [/color][color=#007700]= [/color][COLOR=#0000bb]_
    My[/COLOR][color=#007700].[/color][color=#0000bb]Computer[/color][color=#007700].[/color][color=#0000bb]FileSystem[/color][color=#007700].[/color][color=#0000bb]SpecialDirectories[/color][color=#007700].[/color][COLOR=#0000bb]MyPictures
  
        My[/COLOR][color=#007700].[/color][color=#0000bb]Computer[/color][color=#007700].[/color][color=#0000bb]FileSystem[/color][color=#007700].[/color][color=#0000bb]CopyDirectory[/color][color=#007700]( [/color][COLOR=#0000bb]_
            myPics[/COLOR][color=#007700], [/color][color=#dd0000]"C:\Desktop Wallpaper"[/color][color=#007700], [/color][COLOR=#0000bb]_
            FileIO[/COLOR][color=#007700].[/color][color=#0000bb]UIOption[/color][color=#007700].[/color][color=#0000bb]AllDialogs[/color][color=#007700], [/color][COLOR=#0000bb]_
            FileIO[/COLOR][color=#007700].[/color][color=#0000bb]UICancelOption[/color][color=#007700].[/color][color=#0000bb]DoNothing[/color][COLOR=#007700])
  
        [/COLOR][color=#0000bb]MessageBox[/color][color=#007700].[/color][color=#0000bb]Show[/color][color=#007700]([/color][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]Computer[/color][color=#007700].[/color][color=#0000bb]FileSystem[/color][color=#007700].[/color][color=#0000bb]GetFiles[/color][color=#007700]( [/color][COLOR=#0000bb]_
            myPics[/COLOR][color=#007700], [/color][color=#0000bb]FileIO[/color][color=#007700].[/color][color=#0000bb]SearchOption[/color][color=#007700].[/color][color=#0000bb]SearchAllSubDirectories[/color][color=#007700], [/color][COLOR=#0000bb]_
            [/COLOR][color=#dd0000]"*.jpg"[/color][color=#007700], [/color][color=#dd0000]"*.bmp"[/color][color=#007700]).[/color][color=#0000bb]Count[/color][COLOR=#007700])  
[/COLOR][/COLOR]

ولإنجاز هذه المهمة في إصدار الدوت نت 1.1 سيكون الكود اللازم للقيام بنفس العملية السابقة كما يلي:



كود :
[color=#000000][COLOR=#0000bb]Dim myPics [/color][color=#007700]As [/color][color=#0000bb]String [/color][color=#007700]= [/color][color=#0000bb]Environment[/color][color=#007700].[/color][color=#0000bb]GetFolderPath[/color][color=#007700]( [/color][COLOR=#0000bb]_
        Environment[/COLOR][color=#007700].[/color][color=#0000bb]SpecialFolder[/color][color=#007700].[/color][color=#0000bb]MyPictures[/color][COLOR=#007700])
[/COLOR][color=#0000bb]Dim pictureFiles [/color][color=#007700]As [/color][color=#0000bb]String[/color][color=#007700]() = [/color][color=#0000bb]IO[/color][color=#007700].[/color][color=#0000bb]Directory[/color][color=#007700].[/color][color=#0000bb]GetFiles[/color][color=#007700]([/color][color=#0000bb]myPics[/color][COLOR=#007700])
[/COLOR][color=#0000bb]Dim targetDirectory [/color][color=#007700]As [/color][color=#0000bb]String [/color][color=#007700]= [/color][COLOR=#dd0000]"C:\Desktop Wallpaper"
[/COLOR][color=#0000bb]Dim newPath [/color][color=#007700]As [/color][COLOR=#0000bb]String
Dim jpgAndbmpCount [/COLOR][color=#007700]As [/color][COLOR=#0000bb]Integer
[/COLOR][color=#007700]For [/color][color=#0000bb]Each pic [/color][color=#007700]As [/color][COLOR=#0000bb]String In pictureFiles
    newPath [/COLOR][color=#007700]= [/color][color=#0000bb]IO[/color][color=#007700].[/color][color=#0000bb]Path[/color][color=#007700].[/color][color=#0000bb]Combine[/color][color=#007700]([/color][color=#0000bb]targetDirectory[/color][color=#007700], [/color][color=#0000bb]pic[/color][COLOR=#007700])
    [/COLOR][color=#0000bb]IO[/color][color=#007700].[/color][color=#0000bb]File[/color][color=#007700].[/color][color=#0000bb]Copy[/color][color=#007700]([/color][color=#0000bb]IO[/color][color=#007700].[/color][color=#0000bb]Path[/color][color=#007700].[/color][color=#0000bb]Combine[/color][color=#007700]([/color][color=#0000bb]myPics[/color][color=#007700], [/color][color=#0000bb]pic[/color][color=#007700]), [/color][color=#0000bb]newPath[/color][color=#007700], [/color][color=#0000bb]False[/color][COLOR=#007700])
    If [/COLOR][color=#0000bb]IO[/color][color=#007700].[/color][color=#0000bb]Path[/color][color=#007700].[/color][color=#0000bb]GetExtension[/color][color=#007700]([/color][color=#0000bb]pic[/color][color=#007700]) = [/color][color=#dd0000]"jpg" [/color][color=#007700]Or [/color][COLOR=#0000bb]_
        IO[/COLOR][color=#007700].[/color][color=#0000bb]Path[/color][color=#007700].[/color][color=#0000bb]GetExtension[/color][color=#007700]([/color][color=#0000bb]pic[/color][color=#007700]) = [/color][color=#dd0000]"bmp" [/color][COLOR=#0000bb]Then
        jpgAndbmpCount [/COLOR][color=#007700]+= [/color][COLOR=#0000bb]1
    End [/COLOR][COLOR=#007700]If
[/COLOR][COLOR=#0000bb]Next
MsgBox[/COLOR][color=#007700]([/color][color=#0000bb]jpgAndbmpCount[/color][COLOR=#007700])  
[/COLOR][/COLOR]

ولكم ان تتخيلو كم الكود الذي يستلزم للقيام بنفس الخطوات السابقة باستخدام vb6.

My.Computer.Ports يسهل مهام القراءة والكتابة إلى المنافذ التسلسلية Serial Ports ولك أن تتخيل صعوبة القيام بذلك في vb6


كود :
Dim comport As IO.Ports.SerialPort
comport = My.Computer.Ports.OpenSerialPort("COM1")
AddHandler comport.ReceivedEvent, AddressOf DataReceived
My.Computer.Audio يتسح لك تشغيل الملفات الصوتية ذات التنسيق المعروف, والذي ينهي بذلك الممارسة المعتادة والمتمثلة في استخدام دوال API.


كود :
[color=#000000][COLOR=#0000bb]Dim musicFile [/color][color=#007700]As [/color][COLOR=#0000bb]String
musicFile [/COLOR][color=#007700]= [/color][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]Computer[/color][color=#007700].[/color][color=#0000bb]FileSystem[/color][color=#007700]. [/color][COLOR=#0000bb]_
    GetFiles[/COLOR][color=#007700]([/color][color=#dd0000]"C:\WINDOWS\Media"[/color][color=#007700], [/color][color=#dd0000]"*.wav"[/color][color=#007700])([/color][color=#0000bb]0[/color][color=#007700]).[/color][COLOR=#0000bb]Path
My[/COLOR][color=#007700].[/color][color=#0000bb]Computer[/color][color=#007700].[/color][color=#0000bb]Audio[/color][color=#007700].[/color][color=#0000bb]Play[/color][color=#007700]([/color][color=#0000bb]musicFile[/color][COLOR=#007700])  
[/COLOR][/COLOR]

My.Computer.Network يحتوي على عدد متنوع من الوظائف الهامة للتعامل مع الشبكة, مثل غرسال وتلقي Pings بين جهازين, بالإضافة إلى إمكانية تحميل ورفع الملفات في سطر كود واحد!


كود :
[color=#000000][COLOR=#0000bb]Copy Code [/color][color=#007700]If [/color][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]Computer[/color][color=#007700].[/color][color=#0000bb]Network[/color][color=#007700].[/color][COLOR=#0000bb]IsAvailable Then
    [/COLOR][color=#007700]If [/color][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]Computer[/color][color=#007700].[/color][color=#0000bb]Network[/color][color=#007700].[/color][color=#0000bb]Ping[/color][color=#007700]([/color][color=#dd0000]"www.duncanmackenzie.net"[/color][color=#007700]) [/color][COLOR=#0000bb]Then
        Debug[/COLOR][color=#007700].[/color][color=#0000bb]WriteLine[/color][color=#007700]([/color][color=#dd0000]"Site Available"[/color][COLOR=#007700])
  
        [/COLOR][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]Computer[/color][color=#007700].[/color][color=#0000bb]Network[/color][color=#007700].[/color][color=#0000bb]DownloadFile[/color][color=#007700]( [/color][COLOR=#0000bb]_
            [/COLOR][color=#dd0000]"http://www.duncanmackenzie.net/Articles/"[/color][color=#007700], [/color][COLOR=#0000bb]_
            System[/COLOR][color=#007700].[/color][color=#0000bb]IO[/color][color=#007700].[/color][color=#0000bb]Path[/color][color=#007700].[/color][color=#0000bb]Combine[/color][color=#007700]( [/color][COLOR=#0000bb]_
                My[/COLOR][color=#007700].[/color][color=#0000bb]Computer[/color][color=#007700].[/color][color=#0000bb]FileSystem[/color][color=#007700].[/color][color=#0000bb]SpecialDirectories[/color][color=#007700].[/color][color=#0000bb]MyDocuments[/color][color=#007700], [/color][COLOR=#0000bb]_
                [/COLOR][color=#dd0000]"articles.html"[/color][COLOR=#007700]))
    [/COLOR][color=#0000bb]End [/color][COLOR=#007700]If
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]If  
[/COLOR][/COLOR]

My.User واحد من أسهل الفئات ضمن My Namespace, والتي توفر سهولة الوصول للمعلومات المتعلقة بحساب المستخدم الحالي للتطبيق الخاص بك, وهذا مثال يحدد إذا كان المستخدم الحالي لديه ايه صلاحيات ضمن للقيام بمهام محددة, باختصار التحقق إن كان مسؤولاً للنظام ام لا Administrator.


كود :
[color=#000000][COLOR=#007700]If [/color][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]User[/color][color=#007700].[/color][COLOR=#0000bb]IsAuthenticated Then
    [/COLOR][color=#007700]If [/color][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]User[/color][color=#007700].[/color][color=#0000bb]IsInRole[/color][color=#007700]([/color][color=#dd0000]"BUILTIN\Administrators"[/color][color=#007700]) [/color][COLOR=#0000bb]Then
        MsgBox[/COLOR][color=#007700]([/color][color=#dd0000]"tsk, tsk... running as Admin are we?"[/color][COLOR=#007700])
    [/COLOR][color=#0000bb]End [/color][COLOR=#007700]If
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]If  
[/COLOR][/COLOR]

التعامل مع الموارد Resources والإعدادات من خلال مشاريعك

العناصر الموجودة داخل My Namespace والمرتبطة بخصائص المشروع مثل موارد البرنامج وإعدادات البرنامج وخدمات الويب والنوافذ, تمكنك من التعامل مع برنامجك بشكل فعّال.

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


في كلا الحالتين عليك بإضافة الإعداد الذي ترغب في حفظه من خلال Project Settings قبل الوصول إليه واستخدامه, وهذا المثال يبيِّن كيفية الوصول إلى الإعداد الذي أضفته إلى Project Settings اثناء تشغيل البرنامج وعرضة قيمته.


كود :
[color=#000000][COLOR=#0000bb]Copy Code Dim lastRun [/color][color=#007700]As [/color][color=#0000bb]Date My[/color][color=#007700].[/color][color=#0000bb]Settings[/color][color=#007700].[/color][COLOR=#0000bb]LastRun
My[/COLOR][color=#007700].[/color][color=#0000bb]Settings[/color][color=#007700].[/color][color=#0000bb]LastRun [/color][color=#007700]= [/color][color=#0000bb]Now[/color][COLOR=#007700]()
  
[/COLOR][color=#0000bb]Dim myMessage [/color][color=#007700]As [/color][color=#0000bb]String [/color][color=#007700]= [/color][COLOR=#0000bb]_
    String[/COLOR][color=#007700].[/color][color=#0000bb]Format[/color][color=#007700]([/color][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]Resources[/color][color=#007700].[/color][color=#0000bb]LastRunMessage[/color][color=#007700], [/color][COLOR=#0000bb]_
        lastRun[/COLOR][color=#007700].[/color][color=#0000bb]ToShortDateString[/color][COLOR=#007700])
  
[/COLOR][color=#0000bb]MsgBox[/color][color=#007700]([/color][color=#0000bb]myMessage[/color][COLOR=#007700])  
[/COLOR][/COLOR]


بالإضافة إلى الميزتين السابقتين, فإن اي نموذج موجود في مشروعك يمكن الوصول إليه من خلال My.Froms وكلما أضفت نموذج جديد في وقت التصميم سيتم إضافته تلقائيا إلى My.Froms متاحاً لك استخدامه وقت التشغيل كما ترغب.

My.Forms مختلفة عن My.application.Openforms والتي تحدثنا عنها سابقاً, لأن My.Forms تعيد كاغة النوافذ الموجودة في تطبيقك بينما My.Application.Openforms تعيد فقط النوافذ المفتوحة حلياً.

كما أن خدمات الويب المرتبطة مع تطبيقك كمرجع Web reference يمكن الوصول إليها مباشرة من خلال My.Webservices والكود التالي مثال ليوضح لك الفكرة


كود :
MsgBox(My.WebServices.WeatherForecast.GetWeatherByZipCode("98052").ToString())
وفي الحقيقة هناك المزيد من الأمور التي يجب إيضاحها بخصوص My لذلك من لديه أيه غضافة أخرى بخصوص الأمور التي لم اذكرها في الموضوع فأرجو منه ان يقوم بعرضها لتعميم الفائدة.
}}}
تم الشكر بواسطة:


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


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