Nesta aula iremos aprender um componente muito utilizado para aplicações Windows Forms e WebForms, iremos entender para que serve os nodes e como criar em tempo de execução.
O componente TreeView serve para visualizar informações no formato de árvore. É utilizado tanto em aplicações Windows como Web Forms.
No TreeView existem os nós que podem ser criados dentro de outros nós, que são chamados nodes.Os nodes são arrays que formam estruturas encadeadas.
Nodes é uma coleção de TreeNode ou array de TreeNode. Nesta lista de Nodes temos um método chamado add. O método add pode receber:
Nodes são recursivos, pois toda vez que é criado um objeto node, ele tem uma propriedade chamada nodes, tornando essa forma recursiva, podendo colocar nós dentro de vários nós.
Exemplos de estruturas com visualização em árvore são Menus, Listar diretórios, Upload de arquivos que mostra a lista de diretórios, controle de acessos, entre outros.
Temos outra propriedade no Treeview chamada checkboxes que serve basicamente para selecionar item que queremos utilizar, podendo em seguida fazer um foreach de nodes e em cada nodes, utilizar a propriedade checked que recebe um boolean true ou false.
Ao clicar com o botão direito no componente Treeview, podemos adicionar manualmente os nodes clicando no botão Add Root .
Para adicionar nodes filhos , clicar no node pai que deseja adicionar e então clicar no botão Add Child .
O C# cria o método AfterSelect ao clicar duas vezes no checkbox. Nele podemos codificar a ação que queremos executar quando clicarmos no checkbox, segue exemplo abaixo:
//Toda vez que o nó está selecionado, é executada uma ação. Dessa forma saberemos de qual nó será
//esta ação através do TreeViewEventArgs e dentro deste evento temos o e.Node que foi selecionado.
namespace WindowsFormsApplication
{
public partial class FrmTreeView : Form
{
public FrmTreeView()
{
InitializeComponent();
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
MessageBox.Show(e.Node.Text);
}
}
}
Vamos criar uma função recursiva que armazena em uma string quais nós estão selecionados:
//Função recursiva lerChecados, que verifica se os nós estão selecionados
namespace WindowsFormsApplication
{
public partial class FrmTreeView : Form
{
public FrmTreeView()
{
InitializeComponent();
}
private void button1_Click(object sender, TreeViewEventArgs e)
{
MessageBox.Show(lerChecados(treeView1.Nodes[0]));
}
private string lerChecados(TreeNode node, string checkeds = "")
{
foreach (TreeNode n in node.Nodes)
{
if(n.Checked)
{
checkeds+= n.Text + ", ";
}
checkeds = lerChecados(n,checkeds);
}
return checkeds;
}
}
}
Vamos mostrar um exemplo para listar todos os diretórios de um caminho específico:
namespace WindowsFormsApplication
{
public partial class FrmTree : Form
{
public FrmTree()
{
InitializeComponent();
}
private void FrmTree_Load(object sender, EventArgs e)
{
treeView1.Nodes.Clear();
treeView1.Nodes.Add("estudos");
var node = treeView1.Nodes[0];
loadDiretorios(" @c:\projetos\estudos\ ",ref node);
}
}
}
namespace WindowsFormsApplication
{
public partial class FrmTree : Form
{
public FrmTree()
{
InitializeComponent();
}
private void loadDiretorios(string diretorio, ref TreeNode node)
{
string[] arquivos = Diretory.GetFiles(diretorio);
foreach(string arquivo in arquivo)
{
node.Nodes.Add(Path.GetFileName(arquivo));
}
string[] subdiretorios = Diretory.GetDirectories(diretorio);
foreach(string subdiretorio in subdiretorios)
{
TreeNode n = TreeNode(Path.GetFIleName(subdiretorio));
loadDiretorios(subdiretorio, ref n);
node.Nodes.Add(n));
}
}
}
}
Nesta aula iremos aprender um componente muito utilizado para aplicações Windows Forms e WebForms, iremos entender para que serve os nodes e como criar em tempo de execução.
O componente TreeView serve para visualizar informações no formato de árvore. É utilizado tanto em aplicações Windows como Web Forms.
No TreeView existem os nós que podem ser criados dentro de outros nós, que são chamados nodes.Os nodes são arrays que formam estruturas encadeadas.
Nodes é uma coleção de TreeNode ou array de TreeNode. Nesta lista de Nodes temos um método chamado add. O método add pode receber:
Nodes são recursivos, pois toda vez que é criado um objeto node, ele tem uma propriedade chamada nodes, tornando essa forma recursiva, podendo colocar nós dentro de vários nós.
Exemplos de estruturas com visualização em árvore são Menus, Listar diretórios, Upload de arquivos que mostra a lista de diretórios, controle de acessos, entre outros.
Temos outra propriedade no Treeview chamada checkboxes que serve basicamente para selecionar item que queremos utilizar, podendo em seguida fazer um foreach de nodes e em cada nodes, utilizar a propriedade checked que recebe um boolean true ou false.
Ao clicar com o botão direito no componente Treeview, podemos adicionar manualmente os nodes clicando no botão Add Root .
Para adicionar nodes filhos , clicar no node pai que deseja adicionar e então clicar no botão Add Child .
O C# cria o método AfterSelect ao clicar duas vezes no checkbox. Nele podemos codificar a ação que queremos executar quando clicarmos no checkbox, segue exemplo abaixo:
//Toda vez que o nó está selecionado, é executada uma ação. Dessa forma saberemos de qual nó será
//esta ação através do TreeViewEventArgs e dentro deste evento temos o e.Node que foi selecionado.
namespace WindowsFormsApplication
{
public partial class FrmTreeView : Form
{
public FrmTreeView()
{
InitializeComponent();
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
MessageBox.Show(e.Node.Text);
}
}
}
Vamos criar uma função recursiva que armazena em uma string quais nós estão selecionados:
//Função recursiva lerChecados, que verifica se os nós estão selecionados
namespace WindowsFormsApplication
{
public partial class FrmTreeView : Form
{
public FrmTreeView()
{
InitializeComponent();
}
private void button1_Click(object sender, TreeViewEventArgs e)
{
MessageBox.Show(lerChecados(treeView1.Nodes[0]));
}
private string lerChecados(TreeNode node, string checkeds = "")
{
foreach (TreeNode n in node.Nodes)
{
if(n.Checked)
{
checkeds+= n.Text + ", ";
}
checkeds = lerChecados(n,checkeds);
}
return checkeds;
}
}
}
Vamos mostrar um exemplo para listar todos os diretórios de um caminho específico:
namespace WindowsFormsApplication
{
public partial class FrmTree : Form
{
public FrmTree()
{
InitializeComponent();
}
private void FrmTree_Load(object sender, EventArgs e)
{
treeView1.Nodes.Clear();
treeView1.Nodes.Add("estudos");
var node = treeView1.Nodes[0];
loadDiretorios(" @c:\projetos\estudos\ ",ref node);
}
}
}
namespace WindowsFormsApplication
{
public partial class FrmTree : Form
{
public FrmTree()
{
InitializeComponent();
}
private void loadDiretorios(string diretorio, ref TreeNode node)
{
string[] arquivos = Diretory.GetFiles(diretorio);
foreach(string arquivo in arquivo)
{
node.Nodes.Add(Path.GetFileName(arquivo));
}
string[] subdiretorios = Diretory.GetDirectories(diretorio);
foreach(string subdiretorio in subdiretorios)
{
TreeNode n = TreeNode(Path.GetFIleName(subdiretorio));
loadDiretorios(subdiretorio, ref n);
node.Nodes.Add(n));
}
}
}
}