Postupy: Zpracování událostí automatizace (Visual C#)
Následující postup ukazuje, jak zpracovat události související se okno pomocí Visual C# doplněk.
[!POZNÁMKA]
Dialogová okna a příkazy v nabídkách menu, které vidíte, se mohou lišit od těch popsaných v nápovědě, v závislosti na vašich aktivních nastaveních nebo edici.Tyto postupy byly vyvinuty s aktivní Obecné nastavení pro vývoj.Chcete-li změnit nastavení, zvolte Import and Export Settings v menu Nástroje.Další informace naleznete v tématu Přizpůsobení nastavení pro vývoj v sadě Visual Studio.
Zpracování události týkající se oken pomocí aplikace Visual C#
Vytvoření Visual Studio přidání projektu pomocí Visual C#.
V OnConnection metody je proměnná zachytit události initialize.V následujícím příkladu je tato proměnná s názvem události.
EnvDTE.Events events = _applicationObject.Events;
V OnConnection metodu načtení objektů událostí z automatizace modelu.
winEvents = (EnvDTE.WindowEvents)events.get_WindowEvents(null);
Například proměnná nazývá winEvents.Ostatní objekty automatizace modelu se týkají jiných typů událostí.Například FindEvents se vztahuje na události související s operací, najít a TaskListEvents se vztahuje na události související s Seznam úkolů.Úplný seznam dostupných událostí, viz Reagování na události automatizace.
V OnConnection metoda, připojit každý delegát vystavena z objektů událostí načíst pomocí operátor += v kroku 3 (tři).Například k připojení Delegáti vystavený WindowClosing událostí, můžete použít:
winEvents.WindowClosing += new _dispWindowEvents_WindowClosingEventHandler(this.WindowClosing);
Přidáte postupy pro každé události týkající se objektu události.Například pro zpracování událostí, který nastane, když okno je uzavřen (WindowClosing), použijte:
public void WindowClosing(EnvDTE.Window closingWindow) { outputWindowPane.OutputString ("WindowEvents::WindowClosing\n"); outputWindowPane.OutputString("\tWindow: " + closingWindow.Caption + "\n"); }
U WindowEvents objekt musí mít postupy pro všechny jeho události totiž:
Konečně aby Visual Studio od zpomalení systému nadále sledovat události související se okno po ukončení v, zakázat zpracování událostí.V Visual C#, to je prováděno pomocí operátoru-=.Například k zakázání zpracování událostí pro WindowClosing použijete:
public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom) { if (winEvents != null) { winEvents.WindowClosing -= new _dispWindowEvents_WindowClosingEventHandler (this.WindowClosing); } }
Vypne se zpracování událostí doplněk vypnut nebo doplněk při běhu IDE vypnut.Při vypnutí IDE všechny spuštěné doplňky automaticky ukončeny první.
Příklad
Následující příklad je základní Visual C# , který ukazuje, jak zachytit a zpracovat okna událostí v Visual Studio.Při výskytu události týkající se okna, je odeslána oznámení Výstup okna.
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;
}
}
Probíhá kompilace kódu
Tento kód kompilace, vytvořit nový Visual C# přidat do projektu a nahradit kód třídy připojit kód v příkladu.
Viz také
Úkoly
Postupy: Zpracování událostí automatizace (Visual Basic)
Referenční dokumentace
+= – operátor (Referenční dokumentace jazyka C#)