TreeNode 클래스
TreeView의 노드를 나타냅니다.
네임스페이스: System.Windows.Forms
어셈블리: System.Windows.Forms(system.windows.forms.dll)
구문
‘선언
<SerializableAttribute> _
Public Class TreeNode
Inherits MarshalByRefObject
Implements ICloneable, ISerializable
‘사용 방법
Dim instance As TreeNode
[SerializableAttribute]
public class TreeNode : MarshalByRefObject, ICloneable, ISerializable
[SerializableAttribute]
public ref class TreeNode : public MarshalByRefObject, ICloneable, ISerializable
/** @attribute SerializableAttribute() */
public class TreeNode extends MarshalByRefObject implements ICloneable, ISerializable
SerializableAttribute
public class TreeNode extends MarshalByRefObject implements ICloneable, ISerializable
설명
Nodes 컬렉션은 현재 TreeNode에 할당된 자식 TreeNode 개체를 모두 보유하고 있습니다. TreeNode를 추가, 제거 또는 복제할 수 있으며 이 경우 모든 자식 트리 노드가 추가, 제거 또는 복제됩니다. 각 TreeNode는 다른 TreeNode 개체의 컬렉션을 포함할 수 있습니다. 이렇게 하면 컬렉션을 통해 반복할 때 TreeView에서의 위치를 확인하기 어렵습니다. 트리 구조에서 자신의 위치를 확인하려면 FullPath 속성을 사용합니다. PathSeparator 문자열 값을 사용하여 FullPath 문자열을 구문 분석하면 TreeNode 레이블의 시작 및 끝 위치를 확인할 수 있습니다.
Text 속성을 명시적으로 설정하면 TreeNode 레이블이 설정됩니다. 또는 Text 속성을 나타내는 문자열 매개 변수를 갖는 TreeNode 생성자 중 하나를 사용하여 트리 노드를 만듭니다. 레이블은 TreeNode 이미지 옆에 표시됩니다.
트리 노드 옆에 이미지를 표시하려면 부모 TreeView 컨트롤의 ImageList 속성에 ImageList를 할당하고 ImageList 속성에 있는 인덱스 값을 참조하여 Image를 할당합니다. TreeNode가 선택되지 않은 상태일 때에는 ImageIndex 속성을 표시하고자 하는 Image의 인덱스 값으로 설정합니다. 또한 TreeNode가 선택된 상태일 때에는 SelectedImageIndex 속성을 표시하고자 하는 Image의 인덱스 값으로 설정합니다.
FirstNode, LastNode, NextNode, PrevNode, NextVisibleNode 및 PrevVisibleNode 속성 값을 사용하면 특정 트리 노드를 선택하여 Nodes 컬렉션을 통해 반복할 수 있습니다. 앞에서 언급한 속성 중 하나에서 반환한 TreeNode를 TreeView.SelectedNode 속성에 할당하여 TreeView 컨트롤에서 해당 트리 노드를 선택합니다.
다음 수준의 자식 트리 노드를 표시하도록 트리 노드를 확장할 수 있습니다. 단추가 표시되어 있으면 사용자가 TreeNode 옆에 있는 + 단추를 눌러 TreeNode를 확장할 수 있고, 그렇지 않으면 Expand 메서드를 호출하여 TreeNode를 확장할 수 있습니다. Nodes 컬렉션의 자식 트리 노드 수준을 모두 확장하려면 ExpandAll 메서드를 호출합니다. 자식TreeNode 수준을 축소하려면 Collapse 메서드를 호출하거나 단추가 표시되어 있는 경우 사용자가 TreeNode 옆에 있는 - 단추를 눌러도 됩니다. Toggle 메서드를 호출하여 TreeNode를 확장된 상태와 축소된 상태를 번갈아 선택할 수도 있습니다.
필요에 따라 트리 노드에 확인란을 표시할 수 있습니다. 확인란을 표시하려면 TreeView의 CheckBoxes 속성을 true로 설정합니다. 선택 상태에 있는 트리 노드의 경우 Checked 속성이 true로 설정됩니다.
상속자 참고 사항 TreeNode 클래스가 ISerializable 인터페이스를 구현하므로 serialize할 파생 클래스도 사용자 지정 Serialization에 설명된 대로 이 인터페이스와 특수 생성자를 구현해야 합니다.
예제
다음 코드 예제에서는 TreeView 컨트롤에 고객 정보를 표시합니다. 루트 트리 노드에는 고객 이름이 표시되고 자식 트리 노드에는 각 고객에게 할당된 주문 번호가 표시됩니다. 이 예제에서는 주문을 15개씩 보유하고 있는 1000명의 고객이 표시됩니다. BeginUpdate 및 EndUpdate 메서드를 사용하여 TreeView의 다시 그리기가 억제되고 TreeView에서 TreeNode 개체를 만들고 그리는 동안 대기 중인 Cursor가 표시됩니다. 이 예제를 실행하려면 Order
개체의 컬렉션을 저장할 수 있는 Customer
개체가 있어야 합니다. 또한 Form에 TreeView 컨트롤의 인스턴스가 있어야 합니다.
' Create a new ArrayList to hold the Customer objects.
Private customerArray As New ArrayList()
Private Sub FillMyTreeView()
' Add customers to the ArrayList of Customer objects.
Dim x As Integer
For x = 0 To 999
customerArray.Add(New Customer("Customer" + x.ToString()))
Next x
' Add orders to each Customer object in the ArrayList.
Dim customer1 As Customer
For Each customer1 In customerArray
Dim y As Integer
For y = 0 To 14
customer1.CustomerOrders.Add(New Order("Order" + y.ToString()))
Next y
Next customer1
' Display a wait cursor while the TreeNodes are being created.
Cursor.Current = New Cursor("MyWait.cur")
' Suppress repainting the TreeView until all the objects have been created.
treeView1.BeginUpdate()
' Clear the TreeView each time the method is called.
treeView1.Nodes.Clear()
' Add a root TreeNode for each Customer object in the ArrayList.
Dim customer2 As Customer
For Each customer2 In customerArray
treeView1.Nodes.Add(New TreeNode(customer2.CustomerName))
' Add a child TreeNode for each Order object in the current Customer object.
Dim order1 As Order
For Each order1 In customer2.CustomerOrders
treeView1.Nodes(customerArray.IndexOf(customer2)).Nodes.Add( _
New TreeNode(customer2.CustomerName + "." + order1.OrderID))
Next order1
Next customer2
' Reset the cursor to the default for all controls.
Cursor.Current = System.Windows.Forms.Cursors.Default
' Begin repainting the TreeView.
treeView1.EndUpdate()
End Sub 'FillMyTreeView
// Create a new ArrayList to hold the Customer objects.
private ArrayList customerArray = new ArrayList();
private void FillMyTreeView()
{
// Add customers to the ArrayList of Customer objects.
for(int x=0; x<1000; x++)
{
customerArray.Add(new Customer("Customer" + x.ToString()));
}
// Add orders to each Customer object in the ArrayList.
foreach(Customer customer1 in customerArray)
{
for(int y=0; y<15; y++)
{
customer1.CustomerOrders.Add(new Order("Order" + y.ToString()));
}
}
// Display a wait cursor while the TreeNodes are being created.
Cursor.Current = new Cursor("MyWait.cur");
// Suppress repainting the TreeView until all the objects have been created.
treeView1.BeginUpdate();
// Clear the TreeView each time the method is called.
treeView1.Nodes.Clear();
// Add a root TreeNode for each Customer object in the ArrayList.
foreach(Customer customer2 in customerArray)
{
treeView1.Nodes.Add(new TreeNode(customer2.CustomerName));
// Add a child treenode for each Order object in the current Customer object.
foreach(Order order1 in customer2.CustomerOrders)
{
treeView1.Nodes[customerArray.IndexOf(customer2)].Nodes.Add(
new TreeNode(customer2.CustomerName + "." + order1.OrderID));
}
}
// Reset the cursor to the default for all controls.
Cursor.Current = Cursors.Default;
// Begin repainting the TreeView.
treeView1.EndUpdate();
}
void FillMyTreeView()
{
// Add customers to the ArrayList of Customer objects.
for ( int x = 0; x < 1000; x++ )
{
customerArray->Add( gcnew Customer( "Customer " + x ) );
}
// Add orders to each Customer object in the ArrayList.
IEnumerator^ myEnum = customerArray->GetEnumerator();
while ( myEnum->MoveNext() )
{
Customer^ customer1 = safe_cast<Customer^>(myEnum->Current);
for ( int y = 0; y < 15; y++ )
{
customer1->CustomerOrders->Add( gcnew Order( "Order " + y ) );
}
}
// Display a wait cursor while the TreeNodes are being created.
::Cursor::Current = gcnew System::Windows::Forms::Cursor( "MyWait.cur" );
// Suppress repainting the TreeView until all the objects have been created.
treeView1->BeginUpdate();
// Clear the TreeView each time the method is called.
treeView1->Nodes->Clear();
// Add a root TreeNode for each Customer object in the ArrayList.
while ( myEnum->MoveNext() )
{
Customer^ customer2 = safe_cast<Customer^>(myEnum->Current);
treeView1->Nodes->Add( gcnew TreeNode( customer2->CustomerName ) );
// Add a child treenode for each Order object in the current Customer object.
IEnumerator^ myEnum = customer2->CustomerOrders->GetEnumerator();
while ( myEnum->MoveNext() )
{
Order^ order1 = safe_cast<Order^>(myEnum->Current);
treeView1->Nodes[ customerArray->IndexOf( customer2 ) ]->Nodes->Add( gcnew TreeNode( customer2->CustomerName + "." + order1->OrderID ) );
}
}
// Reset the cursor to the default for all controls.
::Cursor::Current = Cursors::Default;
// Begin repainting the TreeView.
treeView1->EndUpdate();
}
// Create a new ArrayList to hold the Customer objects.
private ArrayList customerArray = new ArrayList();
private void FillMyTreeView()
{
// Add customers to the ArrayList of Customer objects.
for (int x = 0; x < 1000; x++) {
customerArray.Add(new Customer("Customer"
+ ((Int32)x).ToString()));
}
// Add orders to each Customer object in the ArrayList.
for (int iCtr = 0; iCtr < customerArray.get_Count(); iCtr++) {
Customer customer1 = (Customer)customerArray.get_Item(iCtr);
for (int y = 0; y < 15; y++) {
customer1.get_CustomerOrders().Add(new Order("Order"
+ ((Int32)y).ToString()));
}
}
// Display a wait cursor while the TreeNodes are being created.
get_Cursor().set_Current(new Cursor("MyWait.cur"));
// Suppress repainting the TreeView until all the objects have
// been created.
treeView1.BeginUpdate();
// Clear the TreeView each time the method is called.
treeView1.get_Nodes().Clear();
// Add a root TreeNode for each Customer object in the ArrayList.
for (int iCtr1 = 0; iCtr1 < customerArray.get_Count(); iCtr1++) {
Customer customer2 = (Customer)customerArray.get_Item(iCtr1);
treeView1.get_Nodes().Add(new TreeNode(customer2.get_CustomerName()));
// Add a child treenode for each Order object in the current
// Customer object.
for (int iCtr2 = 0; iCtr2 < customer2.get_CustomerOrders().
get_Count(); iCtr2++) {
Order order1 = (Order)customer2.get_CustomerOrders().
get_Item(iCtr2);
treeView1.get_Nodes().
get_Item(customerArray.IndexOf(customer2)).get_Nodes().
Add(new TreeNode(customer2.get_CustomerName() + "."
+ order1.get_OrderID()));
}
}
// Reset the cursor to the default for all controls.
get_Cursor().set_Current(Cursors.get_Default());
// Begin repainting the TreeView.
treeView1.EndUpdate();
} //FillMyTreeView
상속 계층 구조
System.Object
System.MarshalByRefObject
System.Windows.Forms.TreeNode
System.ComponentModel.Design.ObjectSelectorEditor.SelectorNode
스레드로부터의 안전성
이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.
플랫폼
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.
버전 정보
.NET Framework
2.0, 1.1, 1.0에서 지원
.NET Compact Framework
2.0, 1.0에서 지원
참고 항목
참조
TreeNode 멤버
System.Windows.Forms 네임스페이스
TreeView
TreeNodeCollection