IDesignerEventService 인터페이스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
루트 디자이너가 추가되거나 제거되는 경우, 선택된 구성 요소가 변경되는 경우 및 현재 루트 디자이너가 변경되는 경우에 이벤트 알림을 제공합니다.
public interface class IDesignerEventService
public interface IDesignerEventService
type IDesignerEventService = interface
Public Interface IDesignerEventService
예제
이 예에서는 를 사용하여 IDesignerEventService 컨트롤에 이벤트 알림을 표시하는 디자이너를 보여 줍니다. 이 예제를 사용하려면 코드를 클래스 라이브러리로 컴파일합니다. 새 Windows Forms 프로젝트에 라이브러리에 대한 참조를 추가하고 라이브러리 내의 컨트롤을 도구 상자에 추가합니다. 디자인 모드에서 폼에 컨트롤의 DesignerMonitor
instance 추가합니다. 컨트롤을 마우스 오른쪽 단추로 클릭하고 명령을 클릭하여 Start monitoring
에서 발생한 IDesignerEventService이벤트에 대한 알림을 표시합니다.
#using <system.dll>
#using <system.design.dll>
#using <system.windows.forms.dll>
#using <system.drawing.dll>
using namespace System;
using namespace System::ComponentModel;
using namespace System::ComponentModel::Design;
using namespace System::Collections;
using namespace System::Drawing;
using namespace System::Windows::Forms;
using namespace System::Windows::Forms::Design;
namespace DesignerEventServiceExample
{
ref class DesignerMonitorDesigner;
// DesignerMonitor provides a display for designer event notifications.
[Designer(DesignerEventServiceExample::DesignerMonitorDesigner::typeid)]
public ref class DesignerMonitor: public UserControl
{
public:
// List to contain strings that describe designer events.
ArrayList^ updates;
bool monitoring_events;
DesignerMonitor()
{
monitoring_events = false;
updates = gcnew ArrayList;
this->BackColor = Color::White;
this->Size = System::Drawing::Size( 450, 300 );
}
protected:
// Display the message for the current mode, and any event messages if event monitoring is active.
virtual void OnPaint( PaintEventArgs^ e ) override
{
e->Graphics->DrawString( "IDesignerEventService DesignerMonitor Control", gcnew System::Drawing::Font( FontFamily::GenericMonospace,10 ), gcnew SolidBrush( Color::Blue ), 5, 4 );
int yoffset = 10;
if ( !monitoring_events )
{
yoffset += 10;
e->Graphics->DrawString( "Currently not monitoring designer events.", gcnew System::Drawing::Font( FontFamily::GenericMonospace,10 ), gcnew SolidBrush( Color::Black ), 5.f, yoffset + 10.f );
e->Graphics->DrawString( "Use the shortcut menu commands", gcnew System::Drawing::Font( FontFamily::GenericMonospace,10 ), gcnew SolidBrush( Color::Black ), 5.f, yoffset + 30.f );
e->Graphics->DrawString( "provided by an associated DesignerMonitorDesigner", gcnew System::Drawing::Font( FontFamily::GenericMonospace,10 ), gcnew SolidBrush( Color::Black ), 5.f, yoffset + 40.f );
e->Graphics->DrawString( "to start or stop monitoring.", gcnew System::Drawing::Font( FontFamily::GenericMonospace,10 ), gcnew SolidBrush( Color::Black ), 5.f, yoffset + 50.f );
}
else
{
e->Graphics->DrawString( "Currently monitoring designer events.", gcnew System::Drawing::Font( FontFamily::GenericMonospace,10 ), gcnew SolidBrush( Color::DarkBlue ), 5.f, yoffset + 10.f );
e->Graphics->DrawString( "Designer created, changed and disposed events:", gcnew System::Drawing::Font( FontFamily::GenericMonospace,9 ), gcnew SolidBrush( Color::Brown ), 5.f, yoffset + 35.f );
for ( int i = 0; i < updates->Count; i++ )
{
e->Graphics->DrawString( static_cast<String^>(updates[ i ]), gcnew System::Drawing::Font( FontFamily::GenericMonospace,8 ), gcnew SolidBrush( Color::Black ), 5.f, yoffset + 55.f + (10 * i) );
yoffset += 10;
}
}
}
};
// DesignerMonitorDesigner uses the IDesignerEventService to send event information
// to an associated DesignerMonitor control's updates collection.
public ref class DesignerMonitorDesigner: public ControlDesigner
{
private:
DesignerMonitor^ dm;
DesignerVerbCollection^ dvc;
int eventcount;
void StopMonitoring( Object^ /*sender*/, EventArgs^ /*e*/ )
{
IDesignerEventService^ des = dynamic_cast<IDesignerEventService^>(this->Control->Site->GetService( IDesignerEventService::typeid ));
if ( des != nullptr )
{
// Remove event handlers for event notification methods.
des->DesignerCreated -= gcnew DesignerEventHandler( this, &DesignerMonitorDesigner::DesignerCreated );
des->DesignerDisposed -= gcnew DesignerEventHandler( this, &DesignerMonitorDesigner::DesignerDisposed );
des->ActiveDesignerChanged -= gcnew ActiveDesignerEventHandler( this, &DesignerMonitorDesigner::DesignerChanged );
des->SelectionChanged -= gcnew EventHandler( this, &DesignerMonitorDesigner::SelectionChanged );
dm->monitoring_events = false;
// Rebuild menu with "Start monitoring" command.
array<DesignerVerb^>^myArray = {gcnew DesignerVerb( "Start monitoring",gcnew EventHandler( this, &DesignerMonitorDesigner::StartMonitoring ) )};
dvc = gcnew DesignerVerbCollection( myArray );
dm->Refresh();
}
}
void StartMonitoring( Object^ /*sender*/, EventArgs^ /*e*/ )
{
IDesignerEventService^ des = dynamic_cast<IDesignerEventService^>(this->Control->Site->GetService( IDesignerEventService::typeid ));
if ( des != nullptr )
{
// Add event handlers for event notification methods.
des->DesignerCreated += gcnew DesignerEventHandler( this, &DesignerMonitorDesigner::DesignerCreated );
des->DesignerDisposed += gcnew DesignerEventHandler( this, &DesignerMonitorDesigner::DesignerDisposed );
des->ActiveDesignerChanged += gcnew ActiveDesignerEventHandler( this, &DesignerMonitorDesigner::DesignerChanged );
des->SelectionChanged += gcnew EventHandler( this, &DesignerMonitorDesigner::SelectionChanged );
dm->monitoring_events = false;
// Rebuild menu with "Stop monitoring" command.
array<DesignerVerb^>^myArray = {gcnew DesignerVerb( "Stop monitoring",gcnew EventHandler( this, &DesignerMonitorDesigner::StopMonitoring ) )};
dvc = gcnew DesignerVerbCollection( myArray );
dm->Refresh();
}
}
void DesignerCreated( Object^ /*sender*/, DesignerEventArgs^ e )
{
UpdateStatus( "Designer for " + e->Designer->RootComponent->Site->Name + " was created." );
}
void DesignerDisposed( Object^ /*sender*/, DesignerEventArgs^ e )
{
UpdateStatus( "Designer for " + e->Designer->RootComponent->Site->Name + " was disposed." );
}
void DesignerChanged( Object^ /*sender*/, ActiveDesignerEventArgs^ e )
{
UpdateStatus( "Active designer moved from " + e->OldDesigner->RootComponent->Site->Name + " to " + e->NewDesigner->RootComponent->Site->Name + "." );
}
void SelectionChanged( Object^ /*sender*/, EventArgs^ /*e*/ )
{
UpdateStatus("A component selection was changed.");
}
// Update message buffer on DesignerMonitor control.
void UpdateStatus( String^ newmsg )
{
if ( dm->updates->Count > 10 )
dm->updates->RemoveAt( 10 );
dm->updates->Insert( 0, "Event #" + eventcount.ToString() + ": " + newmsg );
eventcount++;
dm->Refresh();
}
};
}
Imports System.Collections
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Windows.Forms.Design
Namespace DesignerEventServiceExample
' DesignerMonitor provides a display for designer event notifications.
<Designer(GetType(DesignerMonitorDesigner))> _
Public Class DesignerMonitor
Inherits System.Windows.Forms.UserControl
' List to contain strings that describe designer events.
Public updates As ArrayList
Public monitoring_events As Boolean = False
Public Sub New()
updates = New ArrayList()
Me.BackColor = Color.Beige
Me.Size = New Size(450, 300)
End Sub
' Display the message for the current mode, and any event messages if monitoring events
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
e.Graphics.DrawString("IDesignerEventService DesignerMonitor control", New Font(FontFamily.GenericMonospace, 10), New SolidBrush(Color.Red), 5, 4)
Dim yoffset As Integer = 10
If Not monitoring_events Then
yoffset += 10
e.Graphics.DrawString("Currently not monitoring designer events.", New Font(FontFamily.GenericMonospace, 10), New SolidBrush(Color.Black), 5, yoffset + 10)
e.Graphics.DrawString("Use the shortcut menu commands", New Font(FontFamily.GenericMonospace, 10), New SolidBrush(Color.Black), 5, yoffset + 30)
e.Graphics.DrawString("provided by an associated DesignerMonitorDesigner", New Font(FontFamily.GenericMonospace, 10), New SolidBrush(Color.Black), 5, yoffset + 40)
e.Graphics.DrawString("to start or stop monitoring.", New Font(FontFamily.GenericMonospace, 10), New SolidBrush(Color.Black), 5, yoffset + 50)
Else
e.Graphics.DrawString("Currently monitoring designer events.", New Font(FontFamily.GenericMonospace, 10), New SolidBrush(Color.DarkBlue), 5, yoffset + 10)
e.Graphics.DrawString("Designer created, changed and disposed events:", New Font(FontFamily.GenericMonospace, 9), New SolidBrush(Color.Brown), 5, yoffset + 35)
Dim i As Integer
For i = 0 To updates.Count - 1
e.Graphics.DrawString(CStr(updates(i)), New Font(FontFamily.GenericMonospace, 8), New SolidBrush(Color.Black), 5, yoffset + 55 + 10 * i)
yoffset += 10
Next i
End If
End Sub
End Class
' DesignerMonitorDesigner uses the IDesignerEventService to send event information
' to an associated DesignerMonitor control's updates collection.
Public Class DesignerMonitorDesigner
Inherits System.Windows.Forms.Design.ControlDesigner
Private dm As DesignerMonitor = Nothing
Private dvc As DesignerVerbCollection = Nothing
Private eventcount As Integer = 0
Public Sub New()
' Initializes the designer's shortcut menu with a "Start monitoring" command.
dvc = New DesignerVerbCollection(New DesignerVerb() {New DesignerVerb("Start monitoring", AddressOf Me.StartMonitoring)})
End Sub
Public Overrides Sub Initialize(ByVal component As System.ComponentModel.IComponent)
MyBase.Initialize(component)
Dim o As Object
o = component
If o.GetType() IsNot GetType(DesignerMonitor) Then
Throw New Exception("This designer requires a DesignerMonitor control.")
End If
dm = CType(component, DesignerMonitor)
End Sub
Public Overrides ReadOnly Property Verbs() As System.ComponentModel.Design.DesignerVerbCollection
Get
Return dvc
End Get
End Property
Private Sub StopMonitoring(ByVal sender As Object, ByVal e As EventArgs)
Dim des As IDesignerEventService = CType(Me.Control.Site.GetService(GetType(IDesignerEventService)), IDesignerEventService)
If des Is Nothing Then
Return
End If
' Remove event handlers for event notification methods.
RemoveHandler des.DesignerCreated, AddressOf Me.DesignerCreated
RemoveHandler des.DesignerDisposed, AddressOf Me.DesignerDisposed
RemoveHandler des.ActiveDesignerChanged, AddressOf Me.DesignerChanged
RemoveHandler des.SelectionChanged, AddressOf Me.SelectionChanged
dm.monitoring_events = False
' Rebuild menu with "Start monitoring" command.
dvc = New DesignerVerbCollection(New DesignerVerb() {New DesignerVerb("Start monitoring", AddressOf Me.StartMonitoring)})
dm.Refresh()
End Sub
Private Sub StartMonitoring(ByVal sender As Object, ByVal e As EventArgs)
Dim des As IDesignerEventService = CType(Me.Control.Site.GetService(GetType(IDesignerEventService)), IDesignerEventService)
If des Is Nothing Then
Return
End If
' Add event handlers for event notification methods.
AddHandler des.DesignerCreated, AddressOf Me.DesignerCreated
AddHandler des.DesignerDisposed, AddressOf Me.DesignerDisposed
AddHandler des.ActiveDesignerChanged, AddressOf Me.DesignerChanged
AddHandler des.SelectionChanged, AddressOf Me.SelectionChanged
dm.monitoring_events = True
' Rebuild menu with "Stop monitoring" command.
dvc = New DesignerVerbCollection(New DesignerVerb() {New DesignerVerb("Stop monitoring", AddressOf Me.StopMonitoring)})
dm.Refresh()
End Sub
Private Sub DesignerCreated(ByVal sender As Object, ByVal e As DesignerEventArgs)
UpdateStatus(("Designer for " + e.Designer.RootComponent.Site.Name + " was created."))
End Sub
Private Sub DesignerDisposed(ByVal sender As Object, ByVal e As DesignerEventArgs)
UpdateStatus(("Designer for " + e.Designer.RootComponent.Site.Name + " was disposed."))
End Sub
Private Sub DesignerChanged(ByVal sender As Object, ByVal e As ActiveDesignerEventArgs)
UpdateStatus(("Active designer moved from " + e.OldDesigner.RootComponent.Site.Name + " to " + e.NewDesigner.RootComponent.Site.Name + "."))
End Sub
Private Sub SelectionChanged(ByVal sender As Object, ByVal e As EventArgs)
UpdateStatus("A component selection was changed.")
End Sub
' Update message buffer on DesignerMonitor control.
Private Sub UpdateStatus(ByVal newmsg As String)
If dm.updates.Count > 10 Then
dm.updates.RemoveAt(10)
End If
dm.updates.Insert(0, "Event #" + eventcount.ToString() + ": " + newmsg)
eventcount += 1
dm.Refresh()
End Sub
End Class
End Namespace
설명
IDesignerEventService 는 새 루트 디자이너를 만들거나 변경하거나 삭제할 때 알림을 제공합니다. 루트 디자이너는 디자이너 뷰에서 문서의 기본 구성 요소에 대한 디자인 타임 지원을 제공합니다. 이벤트는 SelectionChanged 현재 구성 요소 선택이 변경된 경우 알림을 제공합니다.
속성
ActiveDesigner |
현재 활성화된 문서의 루트 디자이너를 가져옵니다. |
Designers |
개발 환경에서 현재 활성화된 디자인 문서에 대한 루트 디자이너의 컬렉션을 가져옵니다. |
이벤트
ActiveDesignerChanged |
현재 루트 디자이너가 변경될 때 발생합니다. |
DesignerCreated |
루트 디자이너를 만들 때 발생합니다. |
DesignerDisposed |
문서의 루트 디자이너가 삭제될 때 발생합니다. |
SelectionChanged |
현재 디자인 뷰 선택 항목이 변경될 때 발생합니다. |
적용 대상
추가 정보
.NET