1633175520
これは、TreeViewコントロールの操作の基本のいくつかを取り上げた短い記事です。この記事では、TreeNodeをTreeViewコントロールに動的に追加し、ノードを検索して、TreeNodeのタグ、テキスト、または名前のプロパティに対して検索語に一致する単一のノードまたはノードのコレクションを見つけて強調表示し、手動またはプログラムでノードを選択する方法について説明します。
図1:TextプロパティによるTreeViewコントロールの検索。
図2:NameプロパティによるTreeViewコントロールの検索。
図3:NameプロパティによるTreeViewコントロールの検索。
図4:特定のプロパティを持つノードの作成。
アプリケーションソリューションには、単一のWindowsアプリケーションプロジェクトが含まれています。このプロジェクトをサポートするために提供されるすべてのコードは、2つのフォームクラスに含まれています。1つは、TreeViewと、ノード情報を表示し(図1、2、および3)、ユーザー指定の検索用語に基づいて特定のノードまたはノードのグループの検索を実行するために使用されるいくつかのコントロールを含むメインフォームです。もう1つのフォームクラス(図4)は、新しいノードを作成するために使用されます。アプリケーション内では、TreeViewからノードを選択し、コンテキストメニューから[ノードの追加]オプションを選択すると、このフォームが表示されます。
このアプリケーションのTreeView関連コンポーネントのいずれかで行われるカスタムまたは派手なことは何もありません。これは、Windowsフォームアプリケーションのコンテキスト内でTreeViewを操作する方法のデモンストレーションにすぎません。
コード:フォーム1-メインフォーム
メインフォームクラスは、いくつかのコントロールが追加された標準のウィンドウフォームです。フォームには分割コンテナコントロールが含まれています。コントロールの左側にはTreeViewコントロールがあり、スプリッターの右側には4つのグループボックスがあります。最初のグループボックスには、選択したノードに関する情報を表示するために使用されるラベルとテキストボックスのセットが含まれ、残りのグループボックスには、ノードのテキスト、名前に基づいてTreeViewのノードコレクションのさまざまな検索を実行するために使用されるラベル、テキストボックス、およびボタンが含まれます。 、またはタグ値。
クラスに含まれる機能は、いくつかの領域に分割されています。クラスは、デフォルトのインポート、名前空間宣言、およびクラス宣言で始まります。
システムを使用する;
System.Collections.Genericを使用する;
System.ComponentModelを使用します。
System.Dataを使用します。
System.Drawingを使用する;
System.Textを使用します。
System.Windows.Formsを使用する;
名前空間 EasyTreeView {
パブリック 部分 クラス Form1:フォーム{
public Form1(){
InitializeComponent();
//ベースツリービューノードを追加することから始めます
TreeNode mainNode = new TreeNode();
mainNode.Name = "mainNode" ;
mainNode.Text = "Main" ;
this .treeView1.Nodes.Add(mainNode);
}
}
}
フォームクラスコンストラクターは、TreeViewコントロールにメインノードを作成します。実行時に、ユーザーはこのノード(またはこのノードから発生する任意の子ノード)を選択して、TreeViewにノードを追加できます。フォームクラスにはコンテキストメニューも含まれています。このコンテキストメニューには2つのオプションがあります。1つは新しいノードを追加するためのもので、もう1つは既存のノードを削除するためのものです。新しいノードが要求されると、アプリケーションは[新しいノード]ダイアログのインスタンスを開きます。このダイアログでは、ユーザーに新しいノードの名前、テキスト、およびタグの値を設定するように強制します。タグ値は任意のオブジェクトにすることができますが、この例では、タグは追加の文字列値を保持するように制限されています。ダイアログから値が収集されると、新しいノードに情報が入力され、TreeViewの選択されたノードに追加されます。
ノードが削除されると、選択されたノードとそのすべての子がTreeViewから削除されます。ここで注意すべきことの1つは、タグを介してオブジェクトをノードに関連付ける場合です。選択したノードを削除する前に、そのオブジェクトを破棄するハンドラーを作成する必要があります。
#regionノードの追加と削除
/// <概要>
///ダイアログボックスを使用してTreeviewノードを追加します
///ユーザーに名前とテキストのプロパティを設定するように強制する
///ノードの
/// </ summary>
///
<param name = "送信者" >
</ param>
///
<param name = "e" >
</ param>
private void cmnuAddNode_Click(object sender、EventArgs e)
{{
NewNode n = new NewNode();
n.ShowDialog();
TreeNode nod = new TreeNode();
nod.Name = n.NewNodeName.ToString();
nod.Text = n.NewNodeText.ToString();
nod.Tag = n.NewNodeTag.ToString();
n.Close();
treeView1.SelectedNode.Nodes.Add(nod);
treeView1.SelectedNode.ExpandAll();
}
/// <概要>
///選択したノードとその子を削除します
/// </ summary>
///
<param name = "送信者" >
</ param>
///
<param name = "e" >
</ param>
private void cmnuRemoveNode_Click(object sender、EventArgs e)
{{
treeView1.SelectedNode.Remove();
}
#endregion
コードの次の領域は、TreeViewイベントを処理するために使用されます。このセクションで処理されるイベントは2つだけです。TreeViewのAfterSelectイベントとTreeViewのclickイベント。After Selectイベントハンドラーは、選択したノードからの情報(名前、テキスト、タグ、および親テキストのプロパティ)を表示するために使用されるテキストボックスにデータを入力するために使用されます。後で説明する検索機能は、一致する各ノードの背景色を黄色に設定することにより、検索に応答して見つかったすべてのノードを強調表示します。TreeViewのクリックイベントハンドラーは、そのような強調表示をすべて削除するために使用されます。
#regionTreeviewイベントハンドラー
/// <概要>
///選択したノードに関する情報を表示します
/// </ summary>
/// <param name = "sender"> </ param>
/// <param name = "e"> </ param>
private void treeView1_AfterSelect(object sender、TreeViewEventArgs e)
{{
試す
{{
txtName.Text = "" ;
txtParentName.Text = "" ;
txtText.Text = "" ;
txtTag.Text = "" ;
txtName.Text = treeView1.SelectedNode.Name.ToString();
txtText.Text = treeView1.SelectedNode.Text.ToString();
txtTag.Text = treeView1.SelectedNode.Tag.ToString();
txtParentName.Text = treeView1.SelectedNode.Parent.Text.ToString();
}
キャッチ {}
}
/// <概要>
///検索関数でマークされたノードをクリアします
/// </ summary>
/// <param name = "sender"> </ param>
/// <param name = "e"> </ param>
private void treeView1_Click(object sender、EventArgs e)
{{
ClearBackColor();
}
#endregion
クラス内の次の領域は、nameプロパティでノードを検索するために使用されます。名前でノードを検索する方法は、TreeViewで直接サポートされている唯一の検索機能です。名前以外の名前でノードを検索する場合は、独自のメソッドを作成する必要があります。このクリックイベントハンドラーは、一致する名前でノードの配列にデータを入力します。findメソッドは2つの引数を受け入れます。最初の引数は検索語で、2番目の引数は子ノードも検索に含めるかどうかを決定するために使用されるブール値です。この場合、検索語はフォームのテキストボックスから収集され、子ノードを検索するオプションは、2番目の引数をtrueに設定することで有効になります。
ノードのコレクションが作成されると、一致する各ノードの背景色が黄色に設定され、TreeViewでノードが強調表示されます。一致するノードの背景色を設定する前に、Clear Back Colorメソッドを呼び出すことにより、TreeView内の他のすべてのノードが白い背景に戻されます。
#region名前で検索
/// <概要>
///ツリービューの組み込みの検索関数を使用します
///ノードを検索する
/// </ summary>
/// <param name = "sender"> </ param>
/// <param name = "e"> </ param>
private void btnFindNode_Click(object sender、EventArgs e)
{{
ClearBackColor();
試す
{{
TreeNode [] tn = treeView1.Nodes [0] .Nodes.Find(txtNodeSearch.Text、 true );
for (int i = 0; i <tn.Length; i ++)
{{
treeView1.SelectedNode = tn [i];
treeView1.SelectedNode.BackColor = Color.Yellow;
}
}
キャッチ {}
}
#endregion
コードの次の領域は、以前の検索で強調表示されたノードから背景色を削除するために使用されます。このプロセスは、2つの別々の方法に依存しています。最初のメソッドは、フォームのTreeViewコントロール内のすべてのノードを含むツリーノードコレクションのインスタンスを作成します。コレクション内の各ノードは、2番目のメソッド(Clear Recursive)に渡されます。この2番目のメソッドには、現在のノードが渡されます。Clear Recursiveメソッドは、渡されたノードノードコレクション内に含まれるすべてのノードをループし、それらの各ノードの背景色を白に設定します。次に、各ノードは同じClear Recursiveメソッドに再帰的に戻され、処理するノードがなくなるまで、各ノードのノードコレクションが処理されます。このようにして、ツリー全体の各ノードと子ノードが処理されます。
このプロセスは、各ノードの背景色を白に設定するためだけに使用されますが、ツリー全体を処理する必要がある場合は常に同じアプローチを使用できます。実際、残りの検索方法はまさにそれを行います。
#regionBackColorを削除します
//ツリービューノードを再帰的に移動します
//そして背景色を白にリセットします
private void ClearBackColor()
{{
TreeNodeCollectionノード= treeView1.Nodes;
foreachの (ツリーノードN における ノード)
{{
ClearRecursive(n);
}
}
// ClearBackColor関数によって呼び出されます
private void ClearRecursive(TreeNode treeNode)
{{
foreachの (ツリーノードTN で treeNode.Nodes)
{{
tn.BackColor = Color.White;
ClearRecursive(tn);
}
}
#endregion
コードの次の領域は、検索式に一致するテキストプロパティを持つ1つまたは複数のノードを見つけるために使用されます。フォームには、テキスト検索用語を設定し、ボタンクリックイベントハンドラーからメソッドを呼び出すために使用されるグループボックスが含まれています。ボタンをクリックすると、最初にClear Back Colorメソッドを呼び出して、強調表示されているすべてのノードがクリアされます。ノードがすべて白い背景に復元された後、ハンドラーはFind ByTextメソッドを呼び出します。この方法は、背景色をクリアするために説明した方法とほとんど同じように機能します。このメソッドは、ツリービューノードのコレクションをアセンブルしてから、各ノードを再帰メソッドに渡します。find recursiveメソッドは、検索式に一致するテキストプロパティを持つノードを検索し、一致するものが見つかると、背景色を黄色に設定します。
#regionテキストで検索
/// <概要>
///テキストによるノードの検索には特別な機能が必要です
///この関数はツリービューを再帰的にスキャンし、
///一致するアイテムをマークします。
/// </ summary>
/// <param name = "sender"> </ param>
/// <param name = "e"> </ param>
private void btnNodeTextSearch_Click(object sender、EventArgs e)
{{
ClearBackColor();
FindByText();
}
private void FindByText()
{{
TreeNodeCollectionノード= treeView1.Nodes;
foreachの (ツリーノードN における ノード)
{{
FindRecursive(n);
}
}
private void FindRecursive(TreeNode treeNode)
{{
foreachの (ツリーノードTN で treeNode.Nodes)
{{
//テキストのプロパティが一致する場合は、アイテムに色を付けます
if (tn.Text == this .txtNodeTextSearch.Text)
tn.BackColor = Color.Yellow;
FindRecursive(tn);
}
}
#endregion
次の領域は、タグ値(この場合は文字列)によってノードを検索するために使用されるメソッドを含むために使用されます。一致するノードを黄色で強調表示します。これらのメソッドは、一致がテキスト値ではなくタグ値によって決定されることを除いて、最後のメソッドとほとんど同じように機能します。
#regionタグで検索
/// <概要>
///タグでノードを検索するには特別な機能が必要です
///この関数はツリービューを再帰的にスキャンし、
///一致するアイテムをマークします。タグはオブジェクトにすることができます。これで
///文字列を含めるためだけに使用される場合
/// </ summary>
/// <param name = "sender"> </ param>
/// <param name = "e"> </ param>
private void btnNodeTagSearch_Click(object sender、EventArgs e)
{{
ClearBackColor();
FindByTag();
}
private void FindByTag()
{{
TreeNodeCollectionノード= treeView1.Nodes;
foreachの (ツリーノードN における ノード)
{{
FindRecursiveTag(n);
}
}
private void FindRecursiveTag(TreeNode treeNode)
{{
foreachの (ツリーノードTN で treeNode.Nodes)
{{
//テキストのプロパティが一致する場合は、アイテムに色を付けます
if (tn.Tag.ToString()== this .txtTagSearch.Text)
tn.BackColor = Color.Yellow;
FindRecursiveTag(tn);
}
}
#endregion
これで、ノードを追加および削除したり、名前、テキスト、またはタグの値に基づいて特定のノードを検索したりするために必要なすべてのコードがまとめられます。
コード:フォーム2-新しいノードフォーム
New Nodeフォームで提供されるコードは、新しく作成されたノードの名前、テキスト、およびタグのプロパティを設定するために使用されるユーザー指定の値をキャプチャするためにのみ使用されます。フォームはダイアログとして表示され、ユーザーがアプリケーションのメインフォームから新しいノードの追加を要求したことに応答して表示されます。インポート、名前空間宣言、およびクラス宣言はすべて、フォームクラスのデフォルト構成にあります。
システムを使用する;
System.Collections.Genericを使用する;
System.ComponentModelを使用します。
System.Dataを使用します。
System.Drawingを使用する;
System.Textを使用します。
System.Windows.Formsを使用する;
名前空間 EasyTreeView
{{
パブリック 部分 クラス NewNode:フォーム
{{
クラス宣言に続いて、3つのローカルメンバー変数が定義されます。それぞれが、ユーザー指定の名前、テキスト、およびタグのプロパティを格納するために使用されます。
#regionローカル変数
プライベート文字列 mNewNodeName;
プライベート文字列 mNewNodeText;
プライベート文字列 mNewNodeTag;
#endregion
フォームコンストラクターはデフォルト構成です。
/// <概要>
///デフォルトのコンストラクタ
/// </ summary>
public NewNode()
{{
InitializeComponent();
}
コードの次の領域は、新しいノード名、テキスト、およびタグ値を保持するために使用される3つのパブリックプロパティを定義するために使用されます。ユーザーがこのフォームにこれらの値を設定すると、メインフォームはこれらのプロパティを収集し、新しいノードの名前、テキスト、およびタグのプロパティに割り当てます。
#regionクラスのプロパティ
パブリック文字列 NewNodeName {
取得 {
mNewNodeNameを返します。
}
セット {
mNewNodeName =値;
}
}
パブリック文字列 NewNodeText {
取得 {
mNewNodeTextを返します。
}
セット {
mNewNodeText =値;
}
}
パブリック文字列 NewNodeTag {
取得 {
mNewNodeTagを返します。
}
セット {
mNewNodeTag =値;
}
}
#endregion
このボタンクリックイベントハンドラーは、ユーザーに3つの値すべてを設定するように強制することを目的としています。それぞれが設定されると、関連するプロパティに正しい値が渡され、フォームが閉じられます。
private void btnSubmit_Click(object sender、EventArgs e){
if (txtNewNodeName.Text!= string .Empty){
NewNodeName = txtNewNodeName.Text;
}
else {
MessageBox.Show("ノードに名前を付けます。" );
戻る;
}
if (txtNewNodeText.Text!= string .Empty){
NewNodeText = txtNewNodeText.Text;
}
else {
MessageBox.Show("新しいノードのテキストを提供する" );
戻る;
}
if (txtTag.Text!= string .Empty){
NewNodeTag = txtTag.Text;
}
else {
MessageBox.Show("新しいノードのテキストを提供する" );
戻る;
}
this .Close();
}
これですべてです。このコードが実行されると、ユーザーはメインノードを右クリックして、適切と思われる数のノードと子ノードを追加できます。ユーザーは、有効な検索式を任意の検索オプションに入力して、一致するノードを強調表示するか、ツリーからノードを選択して、選択したノードから関連する名前、テキスト、タグ、および親の値を読み取ることができます。
当然、TreeViewコントロールを使用する方法は無数にあり、この簡単なデモンストレーションでは、利用可能なさまざまなオプションの調査を開始していません。デモンストレーションの唯一の目的は、ノードを追加および削除する方法、選択したノードから情報を取得する方法、およびノードの名前、テキスト、およびタグ値に基づいて特定のノードを検索する方法の説明を提供することでした。
リンク:https://www.c-sharpcorner.com/
1633175520
これは、TreeViewコントロールの操作の基本のいくつかを取り上げた短い記事です。この記事では、TreeNodeをTreeViewコントロールに動的に追加し、ノードを検索して、TreeNodeのタグ、テキスト、または名前のプロパティに対して検索語に一致する単一のノードまたはノードのコレクションを見つけて強調表示し、手動またはプログラムでノードを選択する方法について説明します。
図1:TextプロパティによるTreeViewコントロールの検索。
図2:NameプロパティによるTreeViewコントロールの検索。
図3:NameプロパティによるTreeViewコントロールの検索。
図4:特定のプロパティを持つノードの作成。
アプリケーションソリューションには、単一のWindowsアプリケーションプロジェクトが含まれています。このプロジェクトをサポートするために提供されるすべてのコードは、2つのフォームクラスに含まれています。1つは、TreeViewと、ノード情報を表示し(図1、2、および3)、ユーザー指定の検索用語に基づいて特定のノードまたはノードのグループの検索を実行するために使用されるいくつかのコントロールを含むメインフォームです。もう1つのフォームクラス(図4)は、新しいノードを作成するために使用されます。アプリケーション内では、TreeViewからノードを選択し、コンテキストメニューから[ノードの追加]オプションを選択すると、このフォームが表示されます。
このアプリケーションのTreeView関連コンポーネントのいずれかで行われるカスタムまたは派手なことは何もありません。これは、Windowsフォームアプリケーションのコンテキスト内でTreeViewを操作する方法のデモンストレーションにすぎません。
コード:フォーム1-メインフォーム
メインフォームクラスは、いくつかのコントロールが追加された標準のウィンドウフォームです。フォームには分割コンテナコントロールが含まれています。コントロールの左側にはTreeViewコントロールがあり、スプリッターの右側には4つのグループボックスがあります。最初のグループボックスには、選択したノードに関する情報を表示するために使用されるラベルとテキストボックスのセットが含まれ、残りのグループボックスには、ノードのテキスト、名前に基づいてTreeViewのノードコレクションのさまざまな検索を実行するために使用されるラベル、テキストボックス、およびボタンが含まれます。 、またはタグ値。
クラスに含まれる機能は、いくつかの領域に分割されています。クラスは、デフォルトのインポート、名前空間宣言、およびクラス宣言で始まります。
システムを使用する;
System.Collections.Genericを使用する;
System.ComponentModelを使用します。
System.Dataを使用します。
System.Drawingを使用する;
System.Textを使用します。
System.Windows.Formsを使用する;
名前空間 EasyTreeView {
パブリック 部分 クラス Form1:フォーム{
public Form1(){
InitializeComponent();
//ベースツリービューノードを追加することから始めます
TreeNode mainNode = new TreeNode();
mainNode.Name = "mainNode" ;
mainNode.Text = "Main" ;
this .treeView1.Nodes.Add(mainNode);
}
}
}
フォームクラスコンストラクターは、TreeViewコントロールにメインノードを作成します。実行時に、ユーザーはこのノード(またはこのノードから発生する任意の子ノード)を選択して、TreeViewにノードを追加できます。フォームクラスにはコンテキストメニューも含まれています。このコンテキストメニューには2つのオプションがあります。1つは新しいノードを追加するためのもので、もう1つは既存のノードを削除するためのものです。新しいノードが要求されると、アプリケーションは[新しいノード]ダイアログのインスタンスを開きます。このダイアログでは、ユーザーに新しいノードの名前、テキスト、およびタグの値を設定するように強制します。タグ値は任意のオブジェクトにすることができますが、この例では、タグは追加の文字列値を保持するように制限されています。ダイアログから値が収集されると、新しいノードに情報が入力され、TreeViewの選択されたノードに追加されます。
ノードが削除されると、選択されたノードとそのすべての子がTreeViewから削除されます。ここで注意すべきことの1つは、タグを介してオブジェクトをノードに関連付ける場合です。選択したノードを削除する前に、そのオブジェクトを破棄するハンドラーを作成する必要があります。
#regionノードの追加と削除
/// <概要>
///ダイアログボックスを使用してTreeviewノードを追加します
///ユーザーに名前とテキストのプロパティを設定するように強制する
///ノードの
/// </ summary>
///
<param name = "送信者" >
</ param>
///
<param name = "e" >
</ param>
private void cmnuAddNode_Click(object sender、EventArgs e)
{{
NewNode n = new NewNode();
n.ShowDialog();
TreeNode nod = new TreeNode();
nod.Name = n.NewNodeName.ToString();
nod.Text = n.NewNodeText.ToString();
nod.Tag = n.NewNodeTag.ToString();
n.Close();
treeView1.SelectedNode.Nodes.Add(nod);
treeView1.SelectedNode.ExpandAll();
}
/// <概要>
///選択したノードとその子を削除します
/// </ summary>
///
<param name = "送信者" >
</ param>
///
<param name = "e" >
</ param>
private void cmnuRemoveNode_Click(object sender、EventArgs e)
{{
treeView1.SelectedNode.Remove();
}
#endregion
コードの次の領域は、TreeViewイベントを処理するために使用されます。このセクションで処理されるイベントは2つだけです。TreeViewのAfterSelectイベントとTreeViewのclickイベント。After Selectイベントハンドラーは、選択したノードからの情報(名前、テキスト、タグ、および親テキストのプロパティ)を表示するために使用されるテキストボックスにデータを入力するために使用されます。後で説明する検索機能は、一致する各ノードの背景色を黄色に設定することにより、検索に応答して見つかったすべてのノードを強調表示します。TreeViewのクリックイベントハンドラーは、そのような強調表示をすべて削除するために使用されます。
#regionTreeviewイベントハンドラー
/// <概要>
///選択したノードに関する情報を表示します
/// </ summary>
/// <param name = "sender"> </ param>
/// <param name = "e"> </ param>
private void treeView1_AfterSelect(object sender、TreeViewEventArgs e)
{{
試す
{{
txtName.Text = "" ;
txtParentName.Text = "" ;
txtText.Text = "" ;
txtTag.Text = "" ;
txtName.Text = treeView1.SelectedNode.Name.ToString();
txtText.Text = treeView1.SelectedNode.Text.ToString();
txtTag.Text = treeView1.SelectedNode.Tag.ToString();
txtParentName.Text = treeView1.SelectedNode.Parent.Text.ToString();
}
キャッチ {}
}
/// <概要>
///検索関数でマークされたノードをクリアします
/// </ summary>
/// <param name = "sender"> </ param>
/// <param name = "e"> </ param>
private void treeView1_Click(object sender、EventArgs e)
{{
ClearBackColor();
}
#endregion
クラス内の次の領域は、nameプロパティでノードを検索するために使用されます。名前でノードを検索する方法は、TreeViewで直接サポートされている唯一の検索機能です。名前以外の名前でノードを検索する場合は、独自のメソッドを作成する必要があります。このクリックイベントハンドラーは、一致する名前でノードの配列にデータを入力します。findメソッドは2つの引数を受け入れます。最初の引数は検索語で、2番目の引数は子ノードも検索に含めるかどうかを決定するために使用されるブール値です。この場合、検索語はフォームのテキストボックスから収集され、子ノードを検索するオプションは、2番目の引数をtrueに設定することで有効になります。
ノードのコレクションが作成されると、一致する各ノードの背景色が黄色に設定され、TreeViewでノードが強調表示されます。一致するノードの背景色を設定する前に、Clear Back Colorメソッドを呼び出すことにより、TreeView内の他のすべてのノードが白い背景に戻されます。
#region名前で検索
/// <概要>
///ツリービューの組み込みの検索関数を使用します
///ノードを検索する
/// </ summary>
/// <param name = "sender"> </ param>
/// <param name = "e"> </ param>
private void btnFindNode_Click(object sender、EventArgs e)
{{
ClearBackColor();
試す
{{
TreeNode [] tn = treeView1.Nodes [0] .Nodes.Find(txtNodeSearch.Text、 true );
for (int i = 0; i <tn.Length; i ++)
{{
treeView1.SelectedNode = tn [i];
treeView1.SelectedNode.BackColor = Color.Yellow;
}
}
キャッチ {}
}
#endregion
コードの次の領域は、以前の検索で強調表示されたノードから背景色を削除するために使用されます。このプロセスは、2つの別々の方法に依存しています。最初のメソッドは、フォームのTreeViewコントロール内のすべてのノードを含むツリーノードコレクションのインスタンスを作成します。コレクション内の各ノードは、2番目のメソッド(Clear Recursive)に渡されます。この2番目のメソッドには、現在のノードが渡されます。Clear Recursiveメソッドは、渡されたノードノードコレクション内に含まれるすべてのノードをループし、それらの各ノードの背景色を白に設定します。次に、各ノードは同じClear Recursiveメソッドに再帰的に戻され、処理するノードがなくなるまで、各ノードのノードコレクションが処理されます。このようにして、ツリー全体の各ノードと子ノードが処理されます。
このプロセスは、各ノードの背景色を白に設定するためだけに使用されますが、ツリー全体を処理する必要がある場合は常に同じアプローチを使用できます。実際、残りの検索方法はまさにそれを行います。
#regionBackColorを削除します
//ツリービューノードを再帰的に移動します
//そして背景色を白にリセットします
private void ClearBackColor()
{{
TreeNodeCollectionノード= treeView1.Nodes;
foreachの (ツリーノードN における ノード)
{{
ClearRecursive(n);
}
}
// ClearBackColor関数によって呼び出されます
private void ClearRecursive(TreeNode treeNode)
{{
foreachの (ツリーノードTN で treeNode.Nodes)
{{
tn.BackColor = Color.White;
ClearRecursive(tn);
}
}
#endregion
コードの次の領域は、検索式に一致するテキストプロパティを持つ1つまたは複数のノードを見つけるために使用されます。フォームには、テキスト検索用語を設定し、ボタンクリックイベントハンドラーからメソッドを呼び出すために使用されるグループボックスが含まれています。ボタンをクリックすると、最初にClear Back Colorメソッドを呼び出して、強調表示されているすべてのノードがクリアされます。ノードがすべて白い背景に復元された後、ハンドラーはFind ByTextメソッドを呼び出します。この方法は、背景色をクリアするために説明した方法とほとんど同じように機能します。このメソッドは、ツリービューノードのコレクションをアセンブルしてから、各ノードを再帰メソッドに渡します。find recursiveメソッドは、検索式に一致するテキストプロパティを持つノードを検索し、一致するものが見つかると、背景色を黄色に設定します。
#regionテキストで検索
/// <概要>
///テキストによるノードの検索には特別な機能が必要です
///この関数はツリービューを再帰的にスキャンし、
///一致するアイテムをマークします。
/// </ summary>
/// <param name = "sender"> </ param>
/// <param name = "e"> </ param>
private void btnNodeTextSearch_Click(object sender、EventArgs e)
{{
ClearBackColor();
FindByText();
}
private void FindByText()
{{
TreeNodeCollectionノード= treeView1.Nodes;
foreachの (ツリーノードN における ノード)
{{
FindRecursive(n);
}
}
private void FindRecursive(TreeNode treeNode)
{{
foreachの (ツリーノードTN で treeNode.Nodes)
{{
//テキストのプロパティが一致する場合は、アイテムに色を付けます
if (tn.Text == this .txtNodeTextSearch.Text)
tn.BackColor = Color.Yellow;
FindRecursive(tn);
}
}
#endregion
次の領域は、タグ値(この場合は文字列)によってノードを検索するために使用されるメソッドを含むために使用されます。一致するノードを黄色で強調表示します。これらのメソッドは、一致がテキスト値ではなくタグ値によって決定されることを除いて、最後のメソッドとほとんど同じように機能します。
#regionタグで検索
/// <概要>
///タグでノードを検索するには特別な機能が必要です
///この関数はツリービューを再帰的にスキャンし、
///一致するアイテムをマークします。タグはオブジェクトにすることができます。これで
///文字列を含めるためだけに使用される場合
/// </ summary>
/// <param name = "sender"> </ param>
/// <param name = "e"> </ param>
private void btnNodeTagSearch_Click(object sender、EventArgs e)
{{
ClearBackColor();
FindByTag();
}
private void FindByTag()
{{
TreeNodeCollectionノード= treeView1.Nodes;
foreachの (ツリーノードN における ノード)
{{
FindRecursiveTag(n);
}
}
private void FindRecursiveTag(TreeNode treeNode)
{{
foreachの (ツリーノードTN で treeNode.Nodes)
{{
//テキストのプロパティが一致する場合は、アイテムに色を付けます
if (tn.Tag.ToString()== this .txtTagSearch.Text)
tn.BackColor = Color.Yellow;
FindRecursiveTag(tn);
}
}
#endregion
これで、ノードを追加および削除したり、名前、テキスト、またはタグの値に基づいて特定のノードを検索したりするために必要なすべてのコードがまとめられます。
コード:フォーム2-新しいノードフォーム
New Nodeフォームで提供されるコードは、新しく作成されたノードの名前、テキスト、およびタグのプロパティを設定するために使用されるユーザー指定の値をキャプチャするためにのみ使用されます。フォームはダイアログとして表示され、ユーザーがアプリケーションのメインフォームから新しいノードの追加を要求したことに応答して表示されます。インポート、名前空間宣言、およびクラス宣言はすべて、フォームクラスのデフォルト構成にあります。
システムを使用する;
System.Collections.Genericを使用する;
System.ComponentModelを使用します。
System.Dataを使用します。
System.Drawingを使用する;
System.Textを使用します。
System.Windows.Formsを使用する;
名前空間 EasyTreeView
{{
パブリック 部分 クラス NewNode:フォーム
{{
クラス宣言に続いて、3つのローカルメンバー変数が定義されます。それぞれが、ユーザー指定の名前、テキスト、およびタグのプロパティを格納するために使用されます。
#regionローカル変数
プライベート文字列 mNewNodeName;
プライベート文字列 mNewNodeText;
プライベート文字列 mNewNodeTag;
#endregion
フォームコンストラクターはデフォルト構成です。
/// <概要>
///デフォルトのコンストラクタ
/// </ summary>
public NewNode()
{{
InitializeComponent();
}
コードの次の領域は、新しいノード名、テキスト、およびタグ値を保持するために使用される3つのパブリックプロパティを定義するために使用されます。ユーザーがこのフォームにこれらの値を設定すると、メインフォームはこれらのプロパティを収集し、新しいノードの名前、テキスト、およびタグのプロパティに割り当てます。
#regionクラスのプロパティ
パブリック文字列 NewNodeName {
取得 {
mNewNodeNameを返します。
}
セット {
mNewNodeName =値;
}
}
パブリック文字列 NewNodeText {
取得 {
mNewNodeTextを返します。
}
セット {
mNewNodeText =値;
}
}
パブリック文字列 NewNodeTag {
取得 {
mNewNodeTagを返します。
}
セット {
mNewNodeTag =値;
}
}
#endregion
このボタンクリックイベントハンドラーは、ユーザーに3つの値すべてを設定するように強制することを目的としています。それぞれが設定されると、関連するプロパティに正しい値が渡され、フォームが閉じられます。
private void btnSubmit_Click(object sender、EventArgs e){
if (txtNewNodeName.Text!= string .Empty){
NewNodeName = txtNewNodeName.Text;
}
else {
MessageBox.Show("ノードに名前を付けます。" );
戻る;
}
if (txtNewNodeText.Text!= string .Empty){
NewNodeText = txtNewNodeText.Text;
}
else {
MessageBox.Show("新しいノードのテキストを提供する" );
戻る;
}
if (txtTag.Text!= string .Empty){
NewNodeTag = txtTag.Text;
}
else {
MessageBox.Show("新しいノードのテキストを提供する" );
戻る;
}
this .Close();
}
これですべてです。このコードが実行されると、ユーザーはメインノードを右クリックして、適切と思われる数のノードと子ノードを追加できます。ユーザーは、有効な検索式を任意の検索オプションに入力して、一致するノードを強調表示するか、ツリーからノードを選択して、選択したノードから関連する名前、テキスト、タグ、および親の値を読み取ることができます。
当然、TreeViewコントロールを使用する方法は無数にあり、この簡単なデモンストレーションでは、利用可能なさまざまなオプションの調査を開始していません。デモンストレーションの唯一の目的は、ノードを追加および削除する方法、選択したノードから情報を取得する方法、およびノードの名前、テキスト、およびタグ値に基づいて特定のノードを検索する方法の説明を提供することでした。