JcmSoft - VB.NET   Usando o controle Splitter

O controle Splitter é um controle do formulário Windows no VB .NET e é utilizado para redimensionar os controles filhos de uma janela em tempo de execução.

Um exemplo bastante conhecido é a janela do Explorer do Windows ; nela temos uma linha que separa duas janelas , podemos arrastar esta linha que separa as janelas alterando o tamanho relativo de cada uma delas. Basta passar com o mouse sobre a linha e quando a seta dupla do mouse aparecer basta arrastar e soltar a linha para o tamanho que deseja configurar. (veja figura ao lado).

O controle Splitter é um controle Simples , mas geralmente é usado com dois controles (TreeView e ListView) que são encaixados lado a lado.

Geralmente não precisamos usar nenhuma das propriedades do controle Splitter para que a funcionalidade do redimensionamento funcione. As propriedades mais importantes deste controle são:

 
Membro Descrição
BackColor Define a cor de plano do fundo do controle
Dock Configura a direção do controle. Se configurado para um lado será usado para alterar a altura dos dois controles ; se for configurado para parte superior/inferior irá alterar a largura dos controles.
minSize Define um tamanho mínimo para o controle.

A seguir vou mostrar como podemos usar o controle Splitter juntamente com os controles TreeView w ListView simulando um Explorer que iremos criar no VB .NET.

1- Inicie um novo projeto do tipo Windows Application no Visual Studio .NET

2- Insira um controle TreeView no formulário padrão e configure sua propriedade Dock para Left, conforme abaixo:

3- Agora insira um controle Splitter no formulário configurando sua propriedade Dock para Left, conforme abaixo:

4- Inclua um controle ListView no formulário e configure sua propriedade Dock para Fill.

5- Pronto ! Você já pode executar o projeto e configurar a largura de cada janela redimensionando os controles TreeView e ListView através do controle Splitter.

Criando um aplicativo similar ao Explorer

Vamos aproveitar o formulário que configuramos acima  , e, usando algum código , criar um Explorer. Devemos então exibir as unidades disponíveis no controle TreeView . Quando um diretório for selecionado seus arquivos deverão ser exibidos no controle ListView.

Vamos inserir o código para carregar os drivers do sistema no controle TreeView no evento Load do formulário - form1.vb :

O método GetLogicalDrives da classe Directory retorna um relação com os nomes das unidades disponíveis na sua máquina (em um array). Usamos um objeto TreeNode para incluir as informações no controle TreeView e incluímos um nó com a palavra "teste".

Quando um diretório for selecionado devemos adicionar os arquivos contidos nele no controle ListView e quando um nó do controle TreeView for expandido os diretórios contidos neste nó deverão ser incluídos no TreeView. Para incluir estas funcionalidades iremos usar os eventos BeforeExpand e AfterSelect do controle TreeView.

Vejamos o código associado a cada evento:

O evento BeferoExpand:

Private Sub TreeView1_BeforeExpand(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TreeView1.BeforeExpand

 

'vamos verificar se existe um nó 'artificial'

Dim onode As TreeNode = CType(e.Node, TreeNode)

 

If onode.Nodes(0).Text = "teste" Then

    'remove o nó que criamos

    onode.Nodes(0).Remove()

    'inclui os nós verdadeiros

    PegaNoFilhos(onode)

End If

End Sub

O evento AfterSelect:

Private Sub TreeView1_AfterSelect(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect

 

   Dim sArquivos() As String

   Try

       sArquivos = Directory.GetFiles(TreeView1.SelectedNode.FullPath)

     Catch excecao As Exception

       'não vamos fazer nada aqui

     End Try

 

   If Not IsNothing(sArquivos) Then

         Dim Arquivo As String

     Dim oitem As ListViewItem

     ListView1.Items.Clear()

     'inclui os arquivos no listview

 

     For Each Arquivo In sArquivos

         oitem = ListView1.Items.Add(Arquivo)

       Next

End If

End Sub

Abaixo o código da rotina PegaNoFilhos :

Private Sub PegaNofilhos(ByVal node As TreeNode)

Dim sDiretorios() As String = Directory.GetDirectories(node.FullPath)

Dim Diretorio As String

Dim onode As TreeNode

 

  'inclui o diretorio 'artificial' teste1

  For Each Diretorio In sDiretorios

    onode = node.Nodes.Add(Diretorio)

    onode.Nodes.Add("teste1")

  Next

End Sub

A rotina não esta completa , deixo para você terminar ; o objetivo do artigo é mostrar como usar o controle splitter. Acabei dando um pequeno exemplo de sua utilização. Ao executar o projeto teremos:

 Até o próximo artigo VB.NET ...


José Carlos Macoratti