كيفية القيام بما يلي: معالجة أحداث التنفيذ التلقائي (‏‫#Visual C)

يوضح الإجراء التالي كيفية مؤشر الأحداث المتعلقة بـ النافذة باستخدام #Visual Cإضافة بوصة

ملاحظة

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

إلى مؤشر الأحداث المتعلقة بـ النافذة باستخدام ‏‫#Visual C

  1. Visual Studioإضافة-in مشروع باستخدام إنشاء #Visual C.

  2. في OnConnectionأسلوب يهيّئ متغير إلى اعتراض الأحداث. في المثال أدناه، يدعى هذا المتغير الأحداث.

    EnvDTE.Events events = _applicationObject.Events;
    
  3. في OnConnectionأسلوب استرداد الحدث الكائنات من طراز التنفيذ التلقائي.

    winEvents = (EnvDTE.WindowEvents)events.get_WindowEvents(null);
    

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

  4. في OnConnectionأسلوب يعيّن كل المفوض كشف من كائنات أحداث استردادها في الخطوة الثالثة (3) باستخدام عامل التشغيل +=. على سبيل المثال، للاتصال المفوضون كشف عن طريق WindowClosingالحدث، هل استخدم:

    winEvents.WindowClosing += new  
    _dispWindowEvents_WindowClosingEventHandler(this.WindowClosing);
    
  5. إضافة إجراءات لكل حدث المتعلقة إلى كائن الحدث. على سبيل المثال، إلى مؤشر الحدث الذي يحدث عند إغلاق نافذة ( WindowClosing) ، يمكنك استخدام:

    public void WindowClosing(EnvDTE.Window closingWindow)
    {
        outputWindowPane.OutputString ("WindowEvents::WindowClosing\n");
        outputWindowPane.OutputString("\tWindow: " + 
        closingWindow.Caption + "\n");
    }
    

    في الحالة الخاصة WindowEventsالكائن يجب أن يكون لديك إجراءات الأحداث الخاصة به namely:

  6. وأخيراً، لمنع Visual Studioمن إبطاء النظام الخاص بك قبل المتابعة لمراقبة أحداث متعلقة بـ النافذة بعد يغلق إضافة - ضمنه، معالجة الحدث يعطل. #Visual C، بذلك باستخدام عامل التشغيل-=. على سبيل المثال إلى يعطل معالجة الحدث من أجل WindowClosingستستخدم:

    public void OnDisconnection(ext_DisconnectMode disconnectMode, 
    ref Array custom)
    {
        if (winEvents != null)
        {
            winEvents.WindowClosing -= new 
            _dispWindowEvents_WindowClosingEventHandler     
            (this.WindowClosing);
        }
    }
    

    هذا بيوقف التشغيل معالجة الحدث ما إذا كان إضافة - في ، متوقف عن التشغيل أو يوقف التشغيل IDE الوقت إلى الأسفل إضافة - في لا يزال قيد التشغيل. عند إيقاف IDE كافة تشغيل إضافة-زر 'زر 'Ins'' الإضافية تلقائياً إيقاف الأول.

مثال

المثال التالي هو أساسية #Visual Cالوظيفة الإضافية التي توضح كيفية إلى اعتراض ومعالجتها الأحداث المتعلقة بـ النافذة في Visual Studio. عند حدوث أحداث متعلقة بـ نافذة يتم إرسال رسالة إعلام إلى النافذة إخراج.

namespace CSEventsAddin
{
    using System;
    using Microsoft.VisualStudio.CommandBars;
    using Extensibility;
    using EnvDTE;
    using EnvDTE80;

    public class Connect : Object, IDTExtensibility2
    {
        public Connect()
        {
        }

        public void OnConnection(object application, ext_ConnectMode 
        connectMode, object addInInst, ref Array custom)
        {
            _applicationObject = (DTE2)application;
            _addInInstance = (AddIn)addInInst;

            // Retrieve the event objects from the automation model.
            EnvDTE.Events events = _applicationObject.Events;
            // Send event messages to the Output window.
            OutputWindow outputWindow = 
            (OutputWindow)_applicationObject.Windows.Item
            (Constants.vsWindowKindOutput).Object;
            outputWindowPane = outputWindow.OutputWindowPanes.Add("DTE 
Event Information");
            // Retrieve the event objects from the automation model.
            winEvents = 
            (EnvDTE.WindowEvents)events.get_WindowEvents(null);

            // Connect to each delegate exposed from each object 
            // retrieved above.
            winEvents.WindowActivated += new 
            _dispWindowEvents_WindowActivatedEventHandler
            (this.WindowActivated);
            winEvents.WindowClosing += new  
            _dispWindowEvents_WindowClosingEventHandler
            (this.WindowClosing);
            winEvents.WindowCreated += new  
            _dispWindowEvents_WindowCreatedEventHandler
            (this.WindowCreated);
            winEvents.WindowMoved += new 
            _dispWindowEvents_WindowMovedEventHandler
            (this.WindowMoved);
        }

        public void OnDisconnection(ext_DisconnectMode disconnectMode, 
        ref Array custom)
        {
            // If the delegate handlers have been connected, then 
            // disconnect them here. 
            // If this is not done, the handlers may still 
            // fire until the next garbage collection event.
            if (winEvents != null)
            {
                winEvents.WindowActivated -= new 
                _dispWindowEvents_WindowActivatedEventHandler
                (this.WindowActivated);
                winEvents.WindowClosing -= new 
                _dispWindowEvents_WindowClosingEventHandler
                (this.WindowClosing);
                winEvents.WindowCreated -= new 
                _dispWindowEvents_WindowCreatedEventHandler
                (this.WindowCreated);
                winEvents.WindowMoved -= new 
                _dispWindowEvents_WindowMovedEventHandler
                (this.WindowMoved);
            }
        }

        // Window-related events.
        public void WindowClosing(EnvDTE.Window closingWindow)
        {
            outputWindowPane.OutputString
("WindowEvents::WindowClosing\n");
            outputWindowPane.OutputString("\tWindow: " + 
closingWindow.Caption + "\n");
        }

        public void WindowActivated(EnvDTE.Window gotFocus,   
        EnvDTE.Window lostFocus)
        {
            outputWindowPane.OutputString
("WindowEvents::WindowActivated\n");
            outputWindowPane.OutputString("\tWindow receiving focus: " 
+ gotFocus.Caption + "\n");
            outputWindowPane.OutputString("\tWindow that lost focus: " 
+ lostFocus.Caption + "\n");
        }

        public void WindowCreated(EnvDTE.Window window)
        {
            outputWindowPane.OutputString
            ("WindowEvents::WindowCreated\n");
            outputWindowPane.OutputString("\tWindow: " + window.Caption 
+ "\n");
        }

        public void WindowMoved(EnvDTE.Window window, int top, int 
        left, int width, int height)
        {
            outputWindowPane.OutputString
            ("WindowEvents::WindowMoved\n");
            outputWindowPane.OutputString("\tWindow: " + window.Caption 
+ "\n");
            outputWindowPane.OutputString("\tLocation: (" + 
top.ToString() + " , " + left.ToString() + " , " + 
width.ToString() + " , " + height.ToString() + ")\n");
        }

        public void OnAddInsUpdate(ref Array custom)
        {
        }

        public void OnStartupComplete(ref Array custom)
        {
        }

        public void OnBeginShutdown(ref Array custom)
        {
        }

        private DTE2 _applicationObject;
        private AddIn _addInInstance;
        private EnvDTE.WindowEvents winEvents;
        private OutputWindowPane outputWindowPane;
    }
}

التحويل البرمجي للتعليمات البرمجية

إلى يحول برمجياً هذه التعليمة البرمجية إنشاء جديد #Visual Cإضافة-in المشروع واستبدالها رمز أسلوب OnConnection مع تعليمات برمجية الموجودة في المثال.

راجع أيضًا:

المهام

كيفية القيام بما يلي: معالجة أحداث التنفيذ التلقائي (‏‫#Visual C)

المرجع

+= عامل (C# مرجع)

موارد أخرى

استجابة إلى أحداث التنفيذ التلقائي

استجابة إلى أحداث (Visual Basic و ‏‫#Visual C المشاريع)