Buscar un Nodo en un TreeView por Texto

23/09/2004 - 11:36 por Oriol | Informe spam
Hola,

Tengo un TreeView con una serie de nodos con subnodos, etc... Mi problema
viene cuando intento buscar un nodo dentro del arbol mediante texto. Tengo
guardado un ID en el campo TAG de cada nodo, y quiero que dado este ID,
pueda encontrar el nodo correspondiente y me lo devuelva para poder
seleccionarlo.

Gracias.

Saludos,
Oriol.

Preguntas similare

Leer las respuestas

#1 Angel J. Hernández
23/09/2004 - 14:41 | Informe spam
Saludos...

Puedes escribir una función recursiva que te permita iterar por los nodos
del árbol. Mediante la propiedad Text del nodo puedes verificar si un nodo
seleccionado contiene la expmresión buscada, así de esa manera sales de la
iteración y devuelves dicho nodo que a su vez tiene en el Tag el ID que
necesitas. Debido a que no se que cantidad de nodos ha de tener tu TreeView
te recomendaría que el proceso de buscar el nodo lo hagas desde un hilo para
así no "entorpecer" la interfaz de tu aplicación.

Espero te pueda servir,


Angel J. Hernández M.
MCSD

"Oriol" <intranet[arroba]rvsa-itv.com> escribió en el mensaje
news:
Hola,

Tengo un TreeView con una serie de nodos con subnodos, etc... Mi problema
viene cuando intento buscar un nodo dentro del arbol mediante texto. Tengo
guardado un ID en el campo TAG de cada nodo, y quiero que dado este ID,
pueda encontrar el nodo correspondiente y me lo devuelva para poder
seleccionarlo.

Gracias.

Saludos,
Oriol.


Respuesta Responder a este mensaje
#2 Alejandro Perez
23/09/2004 - 15:33 | Informe spam
Hola Oriol.. a ver.. aqui te dejo un codigo q te hice...
quizas puedas tomar la idea de alli.. te coloque dos
botones para que realics la busqueda de un nodo por el Tag
o por el Text...

Nos vemos ;) Avisame

Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela




using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WinFindTreeview
{
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TreeView
treeView1;
private System.Windows.Forms.TextBox
txtCriteria;
private System.Windows.Forms.Button
btnBuscarId;
private System.Windows.Forms.Button
btnBuscarTexto;

private System.ComponentModel.Container
components = null;

public Form1()
{
InitializeComponent();
}

protected override void Dispose( bool
disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose
();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated
code

private void InitializeComponent()
{
this.txtCriteria = new
System.Windows.Forms.TextBox();
this.btnBuscarTexto = new
System.Windows.Forms.Button();
this.treeView1 = new
System.Windows.Forms.TreeView();
this.btnBuscarId = new
System.Windows.Forms.Button();
this.SuspendLayout();
//
// txtCriteria
//
this.txtCriteria.Location = new
System.Drawing.Point(104, 256);
this.txtCriteria.Name
= "txtCriteria";
this.txtCriteria.Size = new
System.Drawing.Size(72, 20);
this.txtCriteria.TabIndex = 0;
this.txtCriteria.Text = "";
//
// btnBuscarTexto
//
this.btnBuscarTexto.Location = new
System.Drawing.Point(192, 264);
this.btnBuscarTexto.Name
= "btnBuscarTexto";
this.btnBuscarTexto.Size = new
System.Drawing.Size(88, 24);
this.btnBuscarTexto.TabIndex = 1;
this.btnBuscarTexto.Text = "Buscar
x Text";
this.btnBuscarTexto.Click += new
System.EventHandler(this.btnBuscarTexto_Click);
//
// treeView1
//
this.treeView1.ImageIndex = -1;
this.treeView1.Location = new
System.Drawing.Point(16, 16);
this.treeView1.Name = "treeView1";
this.treeView1.SelectedImageIndex
= -1;
this.treeView1.Size = new
System.Drawing.Size(312, 216);
this.treeView1.TabIndex = 2;
//
// btnBuscarId
//
this.btnBuscarId.Location = new
System.Drawing.Point(192, 240);
this.btnBuscarId.Name
= "btnBuscarId";
this.btnBuscarId.Size = new
System.Drawing.Size(88, 24);
this.btnBuscarId.TabIndex = 3;
this.btnBuscarId.Text = "Buscar x
ID";
this.btnBuscarId.Click += new
System.EventHandler(this.btnBuscarId_Click);
//
// Form1
//
this.AutoScaleBaseSize = new
System.Drawing.Size(5, 13);
this.ClientSize = new
System.Drawing.Size(344, 293);
this.Controls.Add
(this.btnBuscarId);
this.Controls.Add(this.treeView1);
this.Controls.Add
(this.btnBuscarTexto);
this.Controls.Add
(this.txtCriteria);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new
System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);

}
#endregion

[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void Form1_Load(object sender,
System.EventArgs e)
{
TreeNode objNode1 = new TreeNode
("Productos");
TreeNode objNode2 = new TreeNode
("Clientes");
TreeNode objNode3 = new TreeNode
("Producto 1");
objNode3.Tag = "PRO001";
TreeNode objNode4 = new TreeNode
("Producto 2");
objNode4.Tag = "PRO002";
TreeNode objNode5 = new TreeNode
("Producto 3");
objNode5.Tag = "PRO003";
TreeNode objNode6 = new TreeNode
("Cliente 1");
objNode6.Tag = "CLI001";
TreeNode objNode7 = new TreeNode
("Cliente 2");
objNode7.Tag = "CLI002";

treeView1.Nodes.AddRange(new
TreeNode[] {objNode1,objNode2} );
treeView1.Nodes[0].Nodes.AddRange
(new TreeNode[] {objNode3,objNode4,objNode5} );
treeView1.Nodes[1].Nodes.AddRange
(new TreeNode[] {objNode6,objNode7} );

}

TreeNode objReturnNode;
private void BuscarElemento
(TreeNodeCollection objNodeSource, string TextToFind, byte
Propiedad)
{
foreach(TreeNode objNode in
objNodeSource)
{
switch(Propiedad)
{
//ID
case 0:
if
(objNode.Tag!=null&&objNode.Tag.ToString()==TextToFind)

objReturnNode = objNode;
break;
//Texto
case 1:
if
(objNode.Text==TextToFind)

objReturnNode = objNode;
break;
}
BuscarElemento
(objNode.Nodes,TextToFind,Propiedad);
}
}

private void btnBuscarTexto_Click(object
sender, System.EventArgs e)
{
BuscarElemento
(treeView1.Nodes,txtCriteria.Text,1);
if(objReturnNode==null)
MessageBox.Show("No
encontrado");
else
{
MessageBox.Show("El texto
esta en el nodo: " + objReturnNode.FullPath);
objReturnNode=null;
}
}
private void btnBuscarId_Click(object
sender, System.EventArgs e)
{
BuscarElemento
(treeView1.Nodes,txtCriteria.Text,0);
if(objReturnNode==null)
MessageBox.Show("No
encontrado");
else
{
MessageBox.Show("El id
esta en el nodo: " + objReturnNode.FullPath);
objReturnNode=null;
}
}

}
}

Hola,

Tengo un TreeView con una serie de nodos con subnodos,


etc... Mi problema
viene cuando intento buscar un nodo dentro del arbol


mediante texto. Tengo
guardado un ID en el campo TAG de cada nodo, y quiero que


dado este ID,
pueda encontrar el nodo correspondiente y me lo devuelva


para poder
seleccionarlo.

Gracias.

Saludos,
Oriol.


.

Respuesta Responder a este mensaje
#3 Oriol
23/09/2004 - 16:35 | Informe spam
Hola a todos,

Gracias a los dos. Al final he creado una funcion recursiva que me comprueba
todos los elementos del arbol hasta encontrarlos.

El arbol acostumbra a ser pequeño, asi que de momento no me planteo hacerlo
con un hilo, pero lo tendre en cuenta si aparecen problemas.

Saludos.

Oriol.


"Alejandro Perez" escribió en el mensaje
news:23e601c4a171$da4f1a10$
Hola Oriol.. a ver.. aqui te dejo un codigo q te hice...
quizas puedas tomar la idea de alli.. te coloque dos
botones para que realics la busqueda de un nodo por el Tag
o por el Text...

Nos vemos ;) Avisame

Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela




using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WinFindTreeview
{
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TreeView
treeView1;
private System.Windows.Forms.TextBox
txtCriteria;
private System.Windows.Forms.Button
btnBuscarId;
private System.Windows.Forms.Button
btnBuscarTexto;

private System.ComponentModel.Container
components = null;

public Form1()
{
InitializeComponent();
}

protected override void Dispose( bool
disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose
();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated
code

private void InitializeComponent()
{
this.txtCriteria = new
System.Windows.Forms.TextBox();
this.btnBuscarTexto = new
System.Windows.Forms.Button();
this.treeView1 = new
System.Windows.Forms.TreeView();
this.btnBuscarId = new
System.Windows.Forms.Button();
this.SuspendLayout();
//
// txtCriteria
//
this.txtCriteria.Location = new
System.Drawing.Point(104, 256);
this.txtCriteria.Name
= "txtCriteria";
this.txtCriteria.Size = new
System.Drawing.Size(72, 20);
this.txtCriteria.TabIndex = 0;
this.txtCriteria.Text = "";
//
// btnBuscarTexto
//
this.btnBuscarTexto.Location = new
System.Drawing.Point(192, 264);
this.btnBuscarTexto.Name
= "btnBuscarTexto";
this.btnBuscarTexto.Size = new
System.Drawing.Size(88, 24);
this.btnBuscarTexto.TabIndex = 1;
this.btnBuscarTexto.Text = "Buscar
x Text";
this.btnBuscarTexto.Click += new
System.EventHandler(this.btnBuscarTexto_Click);
//
// treeView1
//
this.treeView1.ImageIndex = -1;
this.treeView1.Location = new
System.Drawing.Point(16, 16);
this.treeView1.Name = "treeView1";
this.treeView1.SelectedImageIndex
= -1;
this.treeView1.Size = new
System.Drawing.Size(312, 216);
this.treeView1.TabIndex = 2;
//
// btnBuscarId
//
this.btnBuscarId.Location = new
System.Drawing.Point(192, 240);
this.btnBuscarId.Name
= "btnBuscarId";
this.btnBuscarId.Size = new
System.Drawing.Size(88, 24);
this.btnBuscarId.TabIndex = 3;
this.btnBuscarId.Text = "Buscar x
ID";
this.btnBuscarId.Click += new
System.EventHandler(this.btnBuscarId_Click);
//
// Form1
//
this.AutoScaleBaseSize = new
System.Drawing.Size(5, 13);
this.ClientSize = new
System.Drawing.Size(344, 293);
this.Controls.Add
(this.btnBuscarId);
this.Controls.Add(this.treeView1);
this.Controls.Add
(this.btnBuscarTexto);
this.Controls.Add
(this.txtCriteria);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new
System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);

}
#endregion

[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void Form1_Load(object sender,
System.EventArgs e)
{
TreeNode objNode1 = new TreeNode
("Productos");
TreeNode objNode2 = new TreeNode
("Clientes");
TreeNode objNode3 = new TreeNode
("Producto 1");
objNode3.Tag = "PRO001";
TreeNode objNode4 = new TreeNode
("Producto 2");
objNode4.Tag = "PRO002";
TreeNode objNode5 = new TreeNode
("Producto 3");
objNode5.Tag = "PRO003";
TreeNode objNode6 = new TreeNode
("Cliente 1");
objNode6.Tag = "CLI001";
TreeNode objNode7 = new TreeNode
("Cliente 2");
objNode7.Tag = "CLI002";

treeView1.Nodes.AddRange(new
TreeNode[] {objNode1,objNode2} );
treeView1.Nodes[0].Nodes.AddRange
(new TreeNode[] {objNode3,objNode4,objNode5} );
treeView1.Nodes[1].Nodes.AddRange
(new TreeNode[] {objNode6,objNode7} );

}

TreeNode objReturnNode;
private void BuscarElemento
(TreeNodeCollection objNodeSource, string TextToFind, byte
Propiedad)
{
foreach(TreeNode objNode in
objNodeSource)
{
switch(Propiedad)
{
//ID
case 0:
if
(objNode.Tag!=null&&objNode.Tag.ToString()==TextToFind)

objReturnNode = objNode;
break;
//Texto
case 1:
if
(objNode.Text==TextToFind)

objReturnNode = objNode;
break;
}
BuscarElemento
(objNode.Nodes,TextToFind,Propiedad);
}
}

private void btnBuscarTexto_Click(object
sender, System.EventArgs e)
{
BuscarElemento
(treeView1.Nodes,txtCriteria.Text,1);
if(objReturnNode==null)
MessageBox.Show("No
encontrado");
else
{
MessageBox.Show("El texto
esta en el nodo: " + objReturnNode.FullPath);
objReturnNode=null;
}
}
private void btnBuscarId_Click(object
sender, System.EventArgs e)
{
BuscarElemento
(treeView1.Nodes,txtCriteria.Text,0);
if(objReturnNode==null)
MessageBox.Show("No
encontrado");
else
{
MessageBox.Show("El id
esta en el nodo: " + objReturnNode.FullPath);
objReturnNode=null;
}
}

}
}

>Hola,
>
>Tengo un TreeView con una serie de nodos con subnodos,
etc... Mi problema
>viene cuando intento buscar un nodo dentro del arbol
mediante texto. Tengo
>guardado un ID en el campo TAG de cada nodo, y quiero que
dado este ID,
>pueda encontrar el nodo correspondiente y me lo devuelva
para poder
>seleccionarlo.
>
>Gracias.
>
>Saludos,
>Oriol.
>
>
>.
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida