ItemDragEventHandler 대리자
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
public delegate void ItemDragEventHandler(System::Object ^ sender, ItemDragEventArgs ^ e);
public delegate void ItemDragEventHandler(object sender, ItemDragEventArgs e);
public delegate void ItemDragEventHandler(object? sender, ItemDragEventArgs e);
type ItemDragEventHandler = delegate of obj * ItemDragEventArgs -> unit
Public Delegate Sub ItemDragEventHandler(sender As Object, e As ItemDragEventArgs)
매개 변수
- sender
- Object
이벤트 소스입니다.
이벤트 데이터가 포함된 ItemDragEventArgs입니다.
예제
다음 예제에서는 내에서 끌어서 놓기 작업을 사용 하도록 설정 하는 방법에 설명 된 TreeView 제어 합니다. 예제에서는 모든 노드에 끌어온 노드의 하위 항목이 아닌 다른 노드로 끌어 올 수 있습니다. 모든 해당 하위 노드를 포함 하는 끌어 오는 노드는 대상 노드의 자식 노드가 됩니다. 마우스 왼쪽된 단추를 사용 하면 끌어 오는 노드는 대상 노드로 이동 합니다. 마우스 오른쪽 단추를 사용 하면 대상 노드로 끌어 오는 노드는 복사 됩니다.
#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>
using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;
public ref class Form1: public Form
{
private:
TreeView^ treeView1;
public:
Form1()
{
treeView1 = gcnew TreeView;
this->SuspendLayout();
// Initialize treeView1.
treeView1->AllowDrop = true;
treeView1->Dock = DockStyle::Fill;
// Add nodes to treeView1.
TreeNode^ node;
for ( int x = 0; x < 3; ++x )
{
// Add a root node to treeView1.
node = treeView1->Nodes->Add( String::Format( "Node{0}", x * 4 ) );
for ( int y = 1; y < 4; ++y )
{
// Add a child node to the previously added node.
node = node->Nodes->Add( String::Format( "Node{0}", x * 4 + y ) );
}
}
// Add event handlers for the required drag events.
treeView1->ItemDrag += gcnew ItemDragEventHandler( this, &Form1::treeView1_ItemDrag );
treeView1->DragEnter += gcnew DragEventHandler( this, &Form1::treeView1_DragEnter );
treeView1->DragOver += gcnew DragEventHandler( this, &Form1::treeView1_DragOver );
treeView1->DragDrop += gcnew DragEventHandler( this, &Form1::treeView1_DragDrop );
// Initialize the form.
this->ClientSize = System::Drawing::Size( 292, 273 );
this->Controls->Add( treeView1 );
this->ResumeLayout( false );
}
private:
void treeView1_ItemDrag( Object^ /*sender*/, ItemDragEventArgs^ e )
{
// Move the dragged node when the left mouse button is used.
if ( e->Button == ::MouseButtons::Left )
{
DoDragDrop( e->Item, DragDropEffects::Move );
}
// Copy the dragged node when the right mouse button is used.
else
// Copy the dragged node when the right mouse button is used.
if ( e->Button == ::MouseButtons::Right )
{
DoDragDrop( e->Item, DragDropEffects::Copy );
}
}
// Set the target drop effect to the effect
// specified in the ItemDrag event handler.
void treeView1_DragEnter( Object^ /*sender*/, DragEventArgs^ e )
{
e->Effect = e->AllowedEffect;
}
// Select the node under the mouse pointer to indicate the
// expected drop location.
void treeView1_DragOver( Object^ /*sender*/, DragEventArgs^ e )
{
// Retrieve the client coordinates of the mouse position.
Point targetPoint = treeView1->PointToClient( Point(e->X,e->Y) );
// Select the node at the mouse position.
treeView1->SelectedNode = treeView1->GetNodeAt( targetPoint );
}
void treeView1_DragDrop( Object^ /*sender*/, DragEventArgs^ e )
{
// Retrieve the client coordinates of the drop location.
Point targetPoint = treeView1->PointToClient( Point(e->X,e->Y) );
// Retrieve the node at the drop location.
TreeNode^ targetNode = treeView1->GetNodeAt( targetPoint );
// Retrieve the node that was dragged.
TreeNode^ draggedNode = dynamic_cast<TreeNode^>(e->Data->GetData( TreeNode::typeid ));
// Confirm that the node at the drop location is not
// the dragged node or a descendant of the dragged node.
if ( !draggedNode->Equals( targetNode ) && !ContainsNode( draggedNode, targetNode ) )
{
// If it is a move operation, remove the node from its current
// location and add it to the node at the drop location.
if ( e->Effect == DragDropEffects::Move )
{
draggedNode->Remove();
targetNode->Nodes->Add( draggedNode );
}
// If it is a copy operation, clone the dragged node
// and add it to the node at the drop location.
else
// If it is a copy operation, clone the dragged node
// and add it to the node at the drop location.
if ( e->Effect == DragDropEffects::Copy )
{
targetNode->Nodes->Add( dynamic_cast<TreeNode^>(draggedNode->Clone()) );
}
// Expand the node at the location
// to show the dropped node.
targetNode->Expand();
}
}
// Determine whether one node is a parent
// or ancestor of a second node.
bool ContainsNode( TreeNode^ node1, TreeNode^ node2 )
{
// Check the parent node of the second node.
if ( node2->Parent == nullptr )
return false;
if ( node2->Parent->Equals( node1 ) )
return true;
// If the parent node is not null or equal to the first node,
// call the ContainsNode method recursively using the parent of
// the second node.
return ContainsNode( node1, node2->Parent );
}
};
[STAThread]
int main()
{
Application::Run( gcnew Form1 );
}
using System;
using System.Drawing;
using System.Windows.Forms;
public class Form1 : Form
{
private TreeView treeView1;
public Form1()
{
treeView1 = new TreeView();
this.SuspendLayout();
// Initialize treeView1.
treeView1.AllowDrop = true;
treeView1.Dock = DockStyle.Fill;
// Add nodes to treeView1.
TreeNode node;
for (int x = 0; x < 3; ++x)
{
// Add a root node to treeView1.
node = treeView1.Nodes.Add(String.Format("Node{0}", x*4));
for (int y = 1; y < 4; ++y)
{
// Add a child node to the previously added node.
node = node.Nodes.Add(String.Format("Node{0}", x*4 + y));
}
}
// Add event handlers for the required drag events.
treeView1.ItemDrag += new ItemDragEventHandler(treeView1_ItemDrag);
treeView1.DragEnter += new DragEventHandler(treeView1_DragEnter);
treeView1.DragOver += new DragEventHandler(treeView1_DragOver);
treeView1.DragDrop += new DragEventHandler(treeView1_DragDrop);
// Initialize the form.
this.ClientSize = new Size(292, 273);
this.Controls.Add(treeView1);
this.ResumeLayout(false);
}
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
{
// Move the dragged node when the left mouse button is used.
if (e.Button == MouseButtons.Left)
{
DoDragDrop(e.Item, DragDropEffects.Move);
}
// Copy the dragged node when the right mouse button is used.
else if (e.Button == MouseButtons.Right)
{
DoDragDrop(e.Item, DragDropEffects.Copy);
}
}
// Set the target drop effect to the effect
// specified in the ItemDrag event handler.
private void treeView1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = e.AllowedEffect;
}
// Select the node under the mouse pointer to indicate the
// expected drop location.
private void treeView1_DragOver(object sender, DragEventArgs e)
{
// Retrieve the client coordinates of the mouse position.
Point targetPoint = treeView1.PointToClient(new Point(e.X, e.Y));
// Select the node at the mouse position.
treeView1.SelectedNode = treeView1.GetNodeAt(targetPoint);
}
private void treeView1_DragDrop(object sender, DragEventArgs e)
{
// Retrieve the client coordinates of the drop location.
Point targetPoint = treeView1.PointToClient(new Point(e.X, e.Y));
// Retrieve the node at the drop location.
TreeNode targetNode = treeView1.GetNodeAt(targetPoint);
// Retrieve the node that was dragged.
TreeNode draggedNode = (TreeNode)e.Data.GetData(typeof(TreeNode));
// Confirm that the node at the drop location is not
// the dragged node or a descendant of the dragged node.
if (!draggedNode.Equals(targetNode) && !ContainsNode(draggedNode, targetNode))
{
// If it is a move operation, remove the node from its current
// location and add it to the node at the drop location.
if (e.Effect == DragDropEffects.Move)
{
draggedNode.Remove();
targetNode.Nodes.Add(draggedNode);
}
// If it is a copy operation, clone the dragged node
// and add it to the node at the drop location.
else if (e.Effect == DragDropEffects.Copy)
{
targetNode.Nodes.Add((TreeNode)draggedNode.Clone());
}
// Expand the node at the location
// to show the dropped node.
targetNode.Expand();
}
}
// Determine whether one node is a parent
// or ancestor of a second node.
private bool ContainsNode(TreeNode node1, TreeNode node2)
{
// Check the parent node of the second node.
if (node2.Parent == null) return false;
if (node2.Parent.Equals(node1)) return true;
// If the parent node is not null or equal to the first node,
// call the ContainsNode method recursively using the parent of
// the second node.
return ContainsNode(node1, node2.Parent);
}
}
Imports System.Drawing
Imports System.Windows.Forms
Public Class Form1
Inherits Form
Private treeView1 As TreeView
Public Sub New()
treeView1 = New TreeView()
Me.SuspendLayout()
' Initialize treeView1.
treeView1.AllowDrop = True
treeView1.Dock = DockStyle.Fill
' Add nodes to treeView1.
Dim node As TreeNode
Dim x As Integer
For x = 0 To 3
' Add a root node to treeView1.
node = treeView1.Nodes.Add(String.Format("Node{0}", x * 4))
Dim y As Integer
For y = 1 To 4
' Add a child node to the previously added node.
node = node.Nodes.Add(String.Format("Node{0}", x * 4 + y))
Next y
Next x
' Add event handlers for the required drag events.
AddHandler treeView1.ItemDrag, AddressOf treeView1_ItemDrag
AddHandler treeView1.DragEnter, AddressOf treeView1_DragEnter
AddHandler treeView1.DragOver, AddressOf treeView1_DragOver
AddHandler treeView1.DragDrop, AddressOf treeView1_DragDrop
' Initialize the form.
Me.ClientSize = New Size(292, 273)
Me.Controls.Add(treeView1)
Me.ResumeLayout(False)
End Sub
Shared Sub Main()
Application.Run(New Form1)
End Sub
Private Sub treeView1_ItemDrag(ByVal sender As Object, ByVal e As ItemDragEventArgs)
' Move the dragged node when the left mouse button is used.
If e.Button = MouseButtons.Left Then
DoDragDrop(e.Item, DragDropEffects.Move)
' Copy the dragged node when the right mouse button is used.
ElseIf e.Button = MouseButtons.Right Then
DoDragDrop(e.Item, DragDropEffects.Copy)
End If
End Sub
' Set the target drop effect to the effect
' specified in the ItemDrag event handler.
Private Sub treeView1_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs)
e.Effect = e.AllowedEffect
End Sub
' Select the node under the mouse pointer to indicate the
' expected drop location.
Private Sub treeView1_DragOver(ByVal sender As Object, ByVal e As DragEventArgs)
' Retrieve the client coordinates of the mouse position.
Dim targetPoint As Point = treeView1.PointToClient(new Point(e.X, e.Y))
' Select the node at the mouse position.
treeView1.SelectedNode = treeView1.GetNodeAt(targetPoint)
End Sub
Private Sub treeView1_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs)
' Retrieve the client coordinates of the drop location.
Dim targetPoint As Point = treeView1.PointToClient(New Point(e.X, e.Y))
' Retrieve the node at the drop location.
Dim targetNode As TreeNode = treeView1.GetNodeAt(targetPoint)
' Retrieve the node that was dragged.
Dim draggedNode As TreeNode = CType(e.Data.GetData(GetType(TreeNode)), TreeNode)
' Confirm that the node at the drop location is not
' the dragged node or a descendant of the dragged node.
If Not draggedNode.Equals(targetNode) AndAlso Not ContainsNode(draggedNode, targetNode) Then
' If it is a move operation, remove the node from its current
' location and add it to the node at the drop location.
If e.Effect = DragDropEffects.Move Then
draggedNode.Remove()
targetNode.Nodes.Add(draggedNode)
' If it is a copy operation, clone the dragged node
' and add it to the node at the drop location.
ElseIf e.Effect = DragDropEffects.Copy Then
targetNode.Nodes.Add(CType(draggedNode.Clone(), TreeNode))
End If
' Expand the node at the location
' to show the dropped node.
targetNode.Expand()
End If
End Sub
' Determine whether one node is a parent
' or ancestor of a second node.
Private Function ContainsNode(ByVal node1 As TreeNode, ByVal node2 As TreeNode) As Boolean
' Check the parent node of the second node.
If node2.Parent Is Nothing Then
Return False
End If
If node2.Parent.Equals(node1) Then
Return True
End If
' If the parent node is not null or equal to the first node,
' call the ContainsNode method recursively using the parent of
' the second node.
Return ContainsNode(node1, node2.Parent)
End Function 'ContainsNode
End Class
설명
ItemDragEventHandler 대리자를 만드는 경우 이벤트를 처리할 메서드를 결정합니다. 이벤트를 이벤트 처리기와 연결하려면 대리자의 인스턴스를 해당 이벤트에 추가합니다. 대리자를 제거하지 않는 경우 이벤트가 발생할 때마다 이벤트 처리기가 호출됩니다. 이벤트 처리기 대리자에 대 한 자세한 내용은 참조 하세요. 이벤트 처리 및 발생합니다.
확장 메서드
GetMethodInfo(Delegate) |
지정된 대리자가 나타내는 메서드를 나타내는 개체를 가져옵니다. |
적용 대상
추가 정보
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET