تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
Visual Studio Extensibility الجزء الثاني- توسيع إطار الأدوات
#1
كاتب الموضوع : Islam Ibrahim

هذا الموضوع هو تكملة لموضوع إنشاء إطار الأدوات Tools Window, حيث سنتحدث فيه عن كيفية توسيع إطار الأدوات الذي قمنا بإنشائه في المقال السابق, بإضافة الزر الذي سيظهر في القائمة Tools لـ Visual Studio, والذي سيقوم بعرض مربع حوار "فتح ملف", لاستعراض ملف ما وتشغيله داخل عنصر التحكم "Windows Media Player" , سنقوم كذلك بإضافة قائمة منسدلة DropDown-List والتي ستقوم بعرض قائمة الملفات المتوفرة لتشغيلها في عنصر التحكم, سننفذ هذا الموضوع في ثلاث خطوات رئيسية:
  • إضافة مظهر حيوي للعنصر Menu Command
  • إضافة التعليمات البرمجية اللازمة للتفاعل مع إطار الأدوات
  • استخدام ComboBox في شريط أدوات إطار الأدوات

إضافة مظهر حيوي للعنصر Menu Command

افتراضياً أزرار التحكم Menu Commands ثابتة في موضعها ولا يمكن إخفاؤها بعد إظهارها, سنحاول في هذه الفقرة جعلها حيوية المظهر, أي قابلة للظهور أو الاختفاء, وذلك تبعا لحالة إطار الأدوات الخاص بنا, إن كان نشطاً أم لا.

يجب علينا أولا تغيير FirstToolWin.vsct لإضافة المظهر الحيوي, ثم تنفيذ منطق معيَن لتعيين المظهر عن طريق الكود, سنقوم بإنشاء فئة تحتوي بداخلها على أحداث إطار الأدوات Events, ثم جعل عنصر Menu الخاص بنا قابلا للوصول Accessible in code, ثم ربط الأحداث مع هذا العنصر.

افتح المشروع FirstToolWin الذي قمت بإنشائه في هذا الموضوع.

في مستكشف المشاريع Solution Explorer, افتح FirstToolWin.vsct .

ابحث عن العنصر <Button> الذي يملك المعرِّف cmdidWindowsMedia , بين العنصر <Icon> والعنصر <Strings> أضف ما يلي:


كود :
<CommandFlag>DefaultInvisible</CommandFlag>
<CommandFlag>DynamicVisibility</CommandFlag>
احفظ الملف.
لإنشاء أحداث إطار الأدوات, قم بما يلي:

في مستكشف المشاريع, أنقر بزر الماوس الأيمن فوق اسم المشروع الحالي, ثم اختر Add, ثم انقر فوق "Class".

في مربع الحوار "Add New Item", قم بتسمية الفئة الجديدة ToolWindowEvents ثم انقر "Add".

افتح ToolWindowEvents ثم أضف الأسطر التالية بعد عبارات Using:


كود :
using Microsoft.VisualStudio.Shell.Interop;
using System.ComponentModel.Design;
using System.Security.Permissions;
قم بتغيير خصائص الفئة إلى public و sealed, ثم قم بتنفيذ الواجهة: IVsWindowFrameNotify3


كود :
public sealed class ToolWindowEvents : IVsWindowFrameNotify3
انقر بزر الماوس الأيمن فوق IVsWindowFrameNotify3 في محرر التعليمات البرمجية, انقر فوق Implement Interface لإضافة الإجراءات التي تحتاجها الواجهة Implement Interface.

قم بتنفيذ الإجراء OnShow الخاص بالواجهة كما يلي:


كود :
[PrincipalPermission(SecurityAction.Demand)]
public int OnShow(int fShow)
{
package.toolMenuItem1.Visible
= ((__FRAMESHOW)fShow
!= __FRAMESHOW.FRAMESHOW_WinHidden);
return Microsoft.VisualStudio.VSConstants.S_OK;
}
الأكواد التي قمنا بإضافتها ستقوم باستقبال أحداث إطار الأدوات الخاص بنا, الحدث المستخدم هنا هو الحدث OnShow, والذي يمكن تعيين قابلية إظهار عنصر Menu اعتماداً على القيمة الممررة إلى هذا الحدث, القيمة الممررة إلى هذا الحدث هي ترقيم Enumeration من النوع __FRAMESHOW , يحمل هذا الترقيم عدة قيم , يجب التحقق إن كانت هذه القيمة مساوية لـ FRAMESHOW_WinHidden , غن لم تكن كذلك سنقوم بتغيير خاصية Visible إلى true, وإن كانت كذلك سنقوم تعيين خاصية Visible إلى false.
لاحظ كذلك أن الكود السابق يحتوي المتغير المسمى package هذا المتغير سيمرّر إلى المنشئ .
بعد ذلك, أضف الكود التالي إلى أعلى الفئة, فوق إجراءات الواجهة IVsWindowFrameNotify3


كود :
private FirstToolWinPackage package;
public ToolWindowEvents(FirstToolWinPackage apackage)
{
package = apackage;
}
احفظ التغييرات الجديدة.
في مستكشف المشاريع, افتح الملف FirstToolWinPackage.cs, سنجعل عنصر القائمة Menu Command قابلاُ للوصول من خلال الفئة ToolWindowEvents

عرِّف كائن من النوع MenuCommand في أعلى الفئة, والذي سيمثل عنصر MenuCommand الخاص بنا.


كود :
public MenuCommand toolMenuItem1;
انتقل في محرر الكود إلى الإجراء Initialize انتقل إلى السطرين التاليين:


كود :
MenuCommand menuItem = new MenuCommand(MenuItemCallback, menuCommandID);
mcs.AddCommand(MenuItem);
أضف بعدهما مايلي:


كود :
menuCommandID = new CommandID(GuidList.guidFirstToolWinCmdSet, (int)PkgCmdIDList.cmdidWindowsMedia);
toolMenuItem1 = new MenuCommand(MenuItemCallback, menuCommandID);
mcs.AddCommand(toolMenuItem1);
احفظ الملف.

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

لربط الأحداث, قم بما يلي:

في مستكشف المشاريع, افتح MyToolWindow.cs, قم بعمل Overriding للإجراء OnToolWindowCreated بإضافة الأسطر التالية قبل نهاية الملف


كود :
public override void OnToolWindowCreated()
{
base.OnToolWindowCreated();
var handler = new ToolWindowEvents((FirstToolWinPackage)this.Package);
((IVsWindowFrame)this.Frame).SetProperty((int)__VSFPROPID.VSFPROPID_ViewHelper, handler);
}
يقوم الإجراء السابق بإضافة مثيل (كائن) جديد من فئة الأحداث, ثم يقوم بإضافة هذا المثيل إلى خصائص الإطار, الإجراء SetProperty يقوم بتحقيق ذلك حيث يمرر إليه معلَّمتان two parameters الأولى كائن من نوع الترقيم VSFPROPID_ViewHelper والثانية معالج حدث جديد كما هو ظاهر في الكود.

احفظ الملف.

لتجربة الكود السابق, قم بما يلي:
  • اضغط مفتاح F5 لتشغيل الوضع التجريبي لـ Visual Studio
  • اضغط قائمة Tools في شريط القوائم. (عنصر القائمة WindowsMedia لا يجب أن يظهر)
  • قم بعرض إطار الأدوات Windows Media Player من القائمة View, ثم قم بالتأشير على العنصر Other Windows.
  • اضغط شريط القائمة Tools ثانيةً.
الآن يجب أن يظهر عنصر القائمة WindowsMedia لأنه الآن يمتلك خاصية الظهور أو الاختفاء بناءا على ظهور أو اختفاء إطار الأدوات Windows Media Player
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
Visual Studio Extensibility الجزء الثاني- توسيع إطار الأدوات - بواسطة Raggi Tech - 08-10-12, 12:11 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  حصرياً جميع روابط Microsoft Visual Studio.Net مباشرة وشغالة 100% من شركة Microsoft أسامة أحمد 11 27,006 14-01-24, 10:55 AM
آخر رد: سعيدة نبيل
  تحميل برنامج مايروسوفت فيجوال بيسك Download Microsoft Visual Basic mohamed atef2018 2 5,467 09-07-16, 10:58 PM
آخر رد: عمور2016
  مجموعة من الأدوات المجانية والمفتوحة المصدر ali.alfoly 8 5,157 28-08-13, 12:05 AM
آخر رد: Riad Soft
  الفوارق الأشيع بين لغات .net الأربع (C#- Visual basic - C++-CLI- F#) RaggiTech 0 4,493 27-10-12, 04:20 PM
آخر رد: RaggiTech
  درس-التشفير - الجزء الثانى(Deep in) RaggiTech 2 3,348 09-10-12, 06:44 PM
آخر رد: RaggiTech
  زمن المعالجات - Microsoft Visual Studio LightSwitch RaggiTech 0 2,803 09-10-12, 06:27 PM
آخر رد: RaggiTech
  كيفيه اداره الاحداث فى بيئه الدوت نت الجزء الثالث how To Handle Events in.net Part 3 RaggiTech 0 2,160 09-10-12, 05:22 PM
آخر رد: RaggiTech
  كيفيه اداره الاحداث فى بيئه الدوت نت الجزء الثانى how To Handle Events in .net Part 2 RaggiTech 0 2,169 09-10-12, 05:21 PM
آخر رد: RaggiTech
  كيفيه اداره الاحداث فى بيئه الدوت نت الجزء الاول part 1 how to Handle Events in .net RaggiTech 0 2,043 09-10-12, 05:20 PM
آخر رد: RaggiTech
  مدخل إلى Visual Studio Extensibility باستخدام Visual Studio SDK RaggiTech 0 2,658 09-10-12, 05:05 PM
آخر رد: RaggiTech

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


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