My Namespace
يزود مجال الأسماء My بنية شجرية مفهومة قابلة للفهم سريعا لاجرائيات الفريموورك تستهدف مجموعة من المهام التي تحتاجها بشكل متكرر
فعندما نريد قراءة ملف نصي يكون الحل ضمن Framework 1.1 - VB2003 كالتالي
Dim sr As New IO.StreamReader("c:\mytextfile.txt")
contents = sr.ReadToEnd
sr.Close()وهذا الكود يعمل جيدا في VB2005 ولكن يمكنك كتابته بشكل أسرع كالكود التالي
contents = My.Computer.FileSystem.ReadAllText("c:\mytextfile.txt")الفئة My.Computer.FileSystem هي واحدة من عد فئات ضمن امتداد اللغة My لذا أول شيئ يفترض أن تعمله هو التعرف عليها وما توفره لك
فايجاد وتنفيذ العملية الصحيحة هي عمل روتيني في البرمجة فعندما نريد تنفيذ عملية نستخدمها في عدة أمكنة بشكل متكرر نضمنها ضمن اجراء مساعد لتنفيذ العملية وهذا
الاجراء المساعد هو اجراء يأخذ عدة بارامترات مهمة لك ويقوم بنتفيذ عمل ما بناء عليها مما يسهل عملية البرمجة وهذه عملية يجب على مطوري البرامج القيام بها.
ومجال الأسماء My يستخدم هذه الفكرة لتقديم الكثير من الوظائف الهامة للجميع حيث يمكنك اعتبارها مكتبة كاملة لتحسين الانتاجية
يقدم مجال الأسماء My العديد من الاجرائيات مصنفة ضمن العديد من الفئات المختلفة My.Application, My.Computer, My.Forms, My.Resources,
My.Settings, My.User, My.WebServices وفي العادة يقدم وصولا سهلا للمعلومات ضمن احد تصنيفين أساسيين الفريموورك My.Application,
My.Computer, My.User و المشروع My.Forms, My.Resources, My.Settings,My.WebServices
My.Application
يوفر للمطورين معلومات حول التطبيق والخدمات كمعلومات التطبيق والعنوان والوصف ... الخ فـ OpenForms يوفر معلومات حول النوافذ المفتوحة في المشروع
الحالي و Log يوفر امكانيات للتعامل مع السجلات كتسجيل سجل للأخطاء الحاصلة في البرنامج انظر الكود كمثال
Dim winINIFile As String
Try
winINIFile = My.Computer.FileSystem.ReadAllText("c:\windows\wind.ini")
Catch ex As IO.FileNotFoundException
My.Application.Log.WriteException(ex, TraceEventType.Error,
"Error Accessing INI File")
End Tryو مجموعة OpenForms أضافت امكانية شبيهة لما كان موجودا في VB6 حيث توفر مثلا وسيلة سهلة للتنقل عبر جميبع النوافذ المفتوحة في التطبيق من دون عناء
عمل متغيرات عامة أولا انظر الكود
For Each f As Form In My.Application.OpenForms Debug.WriteLine(f.Text) f.WindowState = FormWindowState.Minimized Next
My.Computer and My.User
My.Compute يمكنك من التنقل عبر الخدمات والمعلومات حول الكمبيوتر المضيف فالفئة FileSystem توفر اجرائيات سهلة للعمل والاستعلام حول الملفات فمثلا
الكود التالي يستخدمها لنسخ جميع الصور الموجودة في مجلد My Pictures الخاص بالمستخدم الحالي إلى المجلد C:\Desktop Wallpaper ويعرض مؤشر تقدم إن
كانت عملية النسخ تأخذ وقتا أكثر من لحظات قليلة
Dim myPics As String = _ My.Computer.FileSystem.SpecialDirectories.MyPictures My.Computer.FileSystem.CopyDirectory( _ myPics, "C:\Desktop Wallpaper", _ FileIO.UIOption.AllDialogs, _ FileIO.UICancelOption.DoNothing) MessageBox.Show(My.Computer.FileSystem.GetFiles( _ myPics, FileIO.SearchOption.SearchAllSubDirectories, _ "*.jpg", "*.bmp").Count)
الفئة My.Computer.Ports تجعل عملية القراءة والكتابة من المدخل التسلسلي عملية بسيطة وهذه تعتبر من العمليات الصعبة ضمن الفريموورك فلعمل نفس وظيفة
الكود التالي كان يتطب كتابة الكثير من الكود سابقا
Dim comport As IO.Ports.SerialPort
comport = My.Computer.Ports.OpenSerialPort("COM1")
AddHandler comport.ReceivedEvent, AddressOf DataReceivedMy.Computer.Audio يمكنك من عزف ملف خاص بالمستخدم أو أحد أصوات النظام
Dim musicFile As String
musicFile = My.Computer.FileSystem. _
GetFiles("C:\WINDOWS\Media", _
FileIO.SearchOption.SearchAllSubDirectories, _
"*.wav")(0)
My.Computer.Audio.Play(musicFile)My.Computer.Network يوفر مجالا واسعا من استدعاءات الشبكة كارسال واستقبال ping من آلة بعيدة أو رفع وتحميل الملفات أوتحديد وضع اتصالك وبعض
الأعمال الأخرى
If My.Computer.Network.IsAvailable Then
If My.Computer.Network.Ping("www.duncanmackenzie.net") Then
Debug.WriteLine("Site Available")
My.Computer.Network.DownloadFile( _
"http://www.duncanmackenzie.net/Articles/", _
System.IO.Path.Combine( _
My.Computer.FileSystem.SpecialDirectories.MyDocuments, _
"articles.html"))
End If
End Ifوهناك العديد من الفئات المثيرة للاهتمام مثل My.Computer.Keyboard, My.Computer.Registry, My.Computer.Screen يمكنك محاولة استكشافها بنفسك
My.User من أبسط الفئات ضمن المجال My ومع ذلك فهي توفر الوصول لمعلومات هامة حول المستخدم الحالي للتطبيق
If My.User.IsAuthenticated Then
If My.User.IsInRole("BUILTIN\Administrators") Then
MsgBox("tsk, tsk... running as Admin are we?")
End If
End Ifعرض الاعدادات وأشياء أخرى من تطبيقك
القسم الذي يركز على تطبيقك ضمن المجال My يتضمن Settings, Resources, WebServices, Forms الاثنان الأولان يتعاملان مع البيانات المرتبطة بتطبيقك
فمن ضمن بيئة التطوير يمكنك ضبط العديد من عناصر المصادر المختلفة وفي حالتي ضبط الـ Resources أو Settings لمشروعك يمكنك الوصول المباشر إليها عبر
My ففور إضافتها لمشروك توفر الفئات My.Settings , My.Resources تعاملا سهلا مع تلك المعلومات فالكود التالي يقرأ ويعدل قيمة إعداد للمستخدم ثم يستخدم
الفئة My.Resources لقراءة نص مخصص
Dim lastRun As Date My.Settings.LastRun My.Settings.LastRun = Now() Dim myMessage As String = _ String.Format(My.Resources.LastRunMessage, _ lastRun.ToShortDateString) MsgBox(myMessage)
بالاضافة إلى ذلك جميع النوافذ في مشروعك موجودة ضمن الفئة My.Forms و أي خدمات ويب موجودة ضمن الفئة My.WebServices وهذا يعني أنه يمكن
الوصول إليهم مباشرة فإذا عملت ربطا لخدمة WeatherForecast من webservicex.net مثلا يمكنك قراءة درجة الحرارة كالكود
Dim tempService As New net.webservicex.www.WeatherForecast()
Dim wf As net.webservicex.www.WeatherForecasts
wf = tempService.GetWeatherByZipCode("98052")
MsgBox(wf.ToString())ويمكنك تبسيط الأمور كما يلي
MsgBox(My.WebServices.WeatherForecast.GetWeatherByZipCode("98052").ToString())My.Forms يختلف عن My.Application.OpenForms بسبب أنه يوفر تواجدا لكل فئة من فئات نماذجك بدون شرط أن تكون مفتوحة حاليا فإذا كنت مبرمج VB6
سابقا ستجد أنها مفيدة كثيرا كالمثال
Private Sub showForm2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles showForm2.Click My.Forms.Form2.Show() End Sub Private Sub updateForm2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles updateForm2.Click My.Forms.Form2.Text = "Updated..." End Sub
وفي الختام يوفر مجال الأسماء My في VB2005 طريقة سريعة وسهلة للوصول إلى وظائف عميقة ضمن الفريموورك بدون استخدام الفريموورك بشكل مباشر بالإضافة إلى استعادة بعض المفاهيم القديمة

