08-10-12, 12:11 PM
كاتب الموضوع : 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 class ToolWindowEvents : IVsWindowFrameNotify3
قم بتنفيذ الإجراء OnShow الخاص بالواجهة كما يلي:
كود :
[PrincipalPermission(SecurityAction.Demand)]
public int OnShow(int fShow)
{
package.toolMenuItem1.Visible
= ((__FRAMESHOW)fShow
!= __FRAMESHOW.FRAMESHOW_WinHidden);
return Microsoft.VisualStudio.VSConstants.S_OK;
}
لاحظ كذلك أن الكود السابق يحتوي المتغير المسمى package هذا المتغير سيمرّر إلى المنشئ .
بعد ذلك, أضف الكود التالي إلى أعلى الفئة, فوق إجراءات الواجهة IVsWindowFrameNotify3
كود :
private FirstToolWinPackage package;
public ToolWindowEvents(FirstToolWinPackage apackage)
{
package = apackage;
}
في مستكشف المشاريع, افتح الملف FirstToolWinPackage.cs, سنجعل عنصر القائمة Menu Command قابلاُ للوصول من خلال الفئة ToolWindowEvents
عرِّف كائن من النوع MenuCommand في أعلى الفئة, والذي سيمثل عنصر MenuCommand الخاص بنا.
كود :
public MenuCommand toolMenuItem1;
كود :
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);
}
احفظ الملف.
لتجربة الكود السابق, قم بما يلي:
- اضغط مفتاح F5 لتشغيل الوضع التجريبي لـ Visual Studio
- اضغط قائمة Tools في شريط القوائم. (عنصر القائمة WindowsMedia لا يجب أن يظهر)
- قم بعرض إطار الأدوات Windows Media Player من القائمة View, ثم قم بالتأشير على العنصر Other Windows.
- اضغط شريط القائمة Tools ثانيةً.