VB.NET - Carregando o conteúdo de uma pasta com LINQ e executando arquivos mp3 em um DataGridview com o MediaPlayer
Neste artigo eu vou mostrar como podemos carregar o conteúdo de uma pasta em um controle DataGridView e executar os arquivos mp3 selecionados usando o MediaPlayer. |
O DataGridView é um o controle que lhe dá a capacidade de personalizar e editar dados tabulares em projetos Windows Forms. Este componente oferece diversas propriedades, métodos e eventos para personalizar sua aparência e comportamento.
A LINQ ou Language integrated Query - é um conjunto de recursos introduzidos no .NET Framework 3.5 que permitem a realização de consultas diretamente em base de dados , documentos XML , estrutura de dados , coleção de objetos ,etc. usando uma sintaxe parecida com a linguagem SQL.
Neste artigo vamos preencher o conteúdo de um DataGridView com o conteúdo de uma pasta , que será informado através da função inputBox, usando uma consulta LINQ, e permitir que o usuário selecione vários arquivos executando-os com o Media Player.
Recursos usados :
Criando o projeto no Visual Studio 2013 Express for windows desktop
Abra o VS 2013 Express for Windows Desktop e clique em New Project;
Selecione a linguagem VB .NET e o template Windows Forms e informe o nome DataGridView_MediaPlayer;
A seguir no formulário form1.vb inclua o seguintes controles a partir da ToolBox:
Disponha os controles no formulário conforme o leiaute abaixo:
Vamos agora incluir as referências aos namespaces que iremos usar em nosso projeto:
Imports
System.IOImports
System.ComponentModelImports
System.Windows.MediaImports
System.Drawing.ColorPara que você consiga declarar a referência ao System.Windows.Media terá que incluir uma referência a biblioteca PresentationCore.
Clique no menu PROJECT e a seguir em Add Reference e selecione o item PresentantionCore e clique em OK;
Agora vamos ao código do projeto...
No evento Click do botão Carregar digite o código abaixo:
Private Sub btnCarregar_Click(sender As Object, e As EventArgs) Handles btnCarregar.Click
Dim caminho As String = "F:\musicas\"
Dim arrLista As New ArrayList
Dim msg, titulo, valor As String
Dim objValor As Object
msg = "Informe o caminho completo dos arquivos. Ex: C:\dados\"
titulo = "Arquivos mp3" ' define o titulo.
valor = "" ' define o valor padrao
' Exibe mensagem posicionada
objValor = InputBox(msg, titulo, valor, 700, 400)
' se pressionar ESC ou cancelar atribui um valor padrão
If objValor Is "" Then objValor = caminho
Try
obtemArquivos(caminho, arrLista)
Dim infoArquivos = From file As IO.FileInfo In arrLista Select file.FullName, file.Length
dgvMusicas.DataSource = infoArquivos.ToList
formataGridView()
Catch ex As Exception
MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
|
Neste código usamos a função inputbox do Visual Basic para apresentar uma caixa de diálogo solicitando ao usuário o caminho e nome da pasta onde estão os arquivos .mp3.
A seguir chamamos a função obtemArquivos() passando o caminho e um arrayList para armazenar o conteúdo da pasta.
Usando uma consulta LINQ extraímos o nome completo do arquivo e seu tamanho e atribuímos ao datagridview e formatamos o grid.
O código do método obtemArquivos é dado a seguir:
Public Sub obtemArquivos(ByVal diretorioRaiz As String, ByRef arrListaArquivos As ArrayList)
If My.Computer.FileSystem.GetDirectoryInfo(diretorioRaiz).Name = "System Volume Information" Then
Return
End If
Try
For Each recursiveDir As String In My.Computer.FileSystem.GetDirectories(diretorioRaiz)
Call obtemArquivos(recursiveDir, arrListaArquivos)
Next
Dim arquivos = From file In My.Computer.FileSystem.GetFiles(diretorioRaiz, FileIO.SearchOption.SearchTopLevelOnly) _
Order By file _
Select My.Computer.FileSystem.GetFileInfo(file)
arrListaArquivos.AddRange(arquivos.ToList)
Catch ex As Exception
Throw ex
End Try
End Sub
|
Este código usa uma consulta LINQ para recursivamente obter os arquivos de uma pasta informada.
O código da rotina formataGridView() é visto a seguir:
Private Sub formataGridView()
With dgvMusicas
.AutoGenerateColumns = False
.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders
.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
'altera a cor das linhas alternadas no grid
.RowsDefaultCellStyle.BackColor = System.Drawing.Color.Aqua
.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.Aquamarine
'altera o nome das colunas
.Columns(0).HeaderText = "Nome do Arquivo"
.Columns(1).HeaderText = "Tamanho"
.Columns(0).Width = 500
.Columns(1).Width = 100
'seleciona a linha inteira
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
'permite seleção de multiplas linhas
.MultiSelect = True
' exibe nulos formatados
.DefaultCellStyle.NullValue = " - "
'permite que o texto maior que célula não seja truncado
.DefaultCellStyle.WrapMode = DataGridViewTriState.True
'define o alinhamento da coluna 1
.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
End With
End Sub
|
Este código formata o datagridview usando suas propriedades e recursos.
Após selecionar os arquivos o usuário deve clicar no botão Tocar Seleção para executar os arquivos. O código do evento Click deste botão é dado a seguir:
Private Sub btnTocar_Click(sender As Object, e As EventArgs) Handles btnTocar.Click, btnSair.Click
Try
Tm.Interval = 100
Tm.Start()
Catch ex As Exception
MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
|
Este código define um intervalo do timer e inicia o timer.
O código associado ao evento Tick do timer é dado abaixo:
Private Sub
Tm_Tick(sender As Object, e As EventArgs) Handles Tm.Tick Static posicao As Integer = 0 Dim tempo As Integer If posicao < dgvMusicas.SelectedRows.Count Then Dim tocar As Integer = dgvMusicas.SelectedRows.Count - 1 - posicao Dim nomeMusica As String = CStr(dgvMusicas.SelectedRows(tocar).Cells(0).Value()) tempo = PlayMedia(nomeMusica) posicao += 1 Tm.Interval = tempo Tm.Start() End If End Sub |
O código percorre a seleção dos arquivos feitos e chama a rotina PlayMedia() passando o nome do arquivo .mp3 para execução.
O código da rotina PlayMedia() é dado abaixo:
Private Function PlayMedia(titulo As String) As Integer
Try
Dim media_player As New MediaPlayer
media_player.Open(New System.Uri(titulo))
System.Threading.Thread.Sleep(3000) 'da tempo para carregar a midia
Dim duration = media_player.NaturalDuration.TimeSpan
Dim time As Integer
time = CInt(duration.TotalMilliseconds)
media_player.Play()
Return time
media_player.Close()
Catch ex As Exception
Throw ex
End Try
End Function
|
O código cria uma instância do MediaPlayer e abre o arquivo selecionado para execução.
Executando o projeto e selecionando alguns arquivos iremos obter o seguinte resultado:
Este projeto mostra como usar alguns recursos interessantes da linguagem VB .NET como o MediaPlayer, o DataGridVIew, o inputbox e as consultas LINQ mas esta longe de ser uma aplicação de produção pois dependendo do cenário poderá ocorrer travamentos em sua execução. Além disso a aplicação pode ser melhorada com recursos como parar e continuar a execução do arquivo e outros detalhes.
Pegue o projeto aqui : DataGridView_Tocador.zip
João 6:35 Declarou-lhes Jesus. Eu sou o pão da
vida; aquele que vem a mim, de modo algum terá fome, e quem crê em mim jamais
terá sede.
João 6:36 Mas como já vos disse, vós me tendes
visto, e contudo não credes.
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET