Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

NOTICIA: Official Microsoft Team Blogs / Microsoft Blogs

BlogMS é um blog que vai mantendo uma lista actualizada de Blogs e Blogs de Equipas oficiais, e respectivos recursos RSS, da Microsoft.

Uma lista com os principais blogs, divididos por categorias, como por exemplo, Office Applications, Security, Software and Web Development, SQL and Business Intelligence, Dynamics, Consumer and Hardware Solutions, Microsoft Learning, Windows Desktop and Embedded, etc.

A lista completa tem actualmente 252 blogs: Official Microsoft Team Blogs / Microsoft Blogs

Além disso, fazem ainda um resumo semanal dos artigos publicados nos respectivos blogs, com os principais títulos e datas de publicação.

Um recurso importante para quem quer estar actualizado em uma ou mais áreas.


VB.NET: XML Literals - Parte I

Antes de falar propriamente nos XML Literals, e porque nunca aqui foi referido e será utilizado neste exemplo, vou falar um pouco sobre a declaração Option Infer.

Option Infer

A declaração Option Infer On permite que não se indique o tipo de variável, sendo esta identificada efectuada automaticamente pelo compilador.

Isto é bastante útil para LINQ ou para Lambda Expressions e pode ser activado ou desactivado a nível do projecto (Tools - Options - Projects and Solutions - VB Defaults) ou a nível do documento, através da declaração "Option Infer On" ou "Option Infer Off". Por defeito está definido para "On".

Vejamos estas declarações:

Dim str = "Exemplo"
Dim int = 123
Dim dbl = 12.3
Dim list = New List(Of Integer)

Nestes exemplos, e caso esteja definido Option Infer On, as variáveis serão definidas como str = String, int = Integer, dbl = Double e list as System.Collections.Generics.List(of T).

É o mesmo que fazer:

Dim str As String = "Exemplo"
Dim int As Integer = 123
Dim dbl As Double = 12.3
Dim list As New List(Of Integer)

Caso estivesse definido como Option Infer Off, todas as variáveis ficariam definidas como Object, e não o tipo desejado.

XML Literals

Passando ao tema principal deste artigo, este pretende mostrar como os XML Literals permitem incorporar o XML directamente no código e com isso, conseguir manipular muito facilmente este tipo de ficheiros. Os XML Literals estão disponíveis a partir do Visual Studio 2008, suportando a maioria da especificação Extensible Markup Language (XML) 1.0.

Este exemplo cria, em modo runtime, a estrutura de um ficheiro XML, com alguns dados, estando disponível intellissence e auto-indenting do texto:

Dim bookList = _
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <!--
Lista de livros e revistas -->
    <
library>
        <
books>
            <
book name="Crepúsculo" author="Stephenie Meyer"/>
            <
book name="Equador" author="Miguel S. Tavares"/>
            <
book name="O Sétimo Selo" author="José R. dos Santos"/>
        </
books>
        <
magazine>
            <
magazineName>"MSDN Magazine"</magazineName>
            <
magazineName>"Code Magazine"</magazineName>
        </
magazine>
    </
library>

 
Com base no ficheiro criado, e para listar todas as revistas, indicando o caminho da estrutura XML até ao elemento pretendido, podemos criar um ciclo For Each:

For Each m In From element In _
                                        bookList.<library>.<magazine>.<magazineName>
  
Debug.WriteLine(m.Value)
Next

Este é um método mais prático de o fazer, sem ser necessário indicar o caminho para o elemento pretendido, utilizando a propriedade Descendants, que irá retornar todos os elementos descendentes que encontre na descrição especificada entre as chavetas <>:

For Each m In From element In bookList...<magazineName>
   
Debug.WriteLine(m.Value)
Next


Para listar os livros, o processo é semelhante, mas desta vez como o Nome e o Autor estão como atributos, utiliza-se o caracter "@" para indicar qual o atributo a ler:

For Each book In From element In bookList...<book>
   
Debug.WriteLine("Livro: " & book.@name.ToString)
    Debug.WriteLine("Autor: " & book.@author.ToString)

    ' Linha de separação
   
Debug.WriteLine(New String("-"c, 40))
Next

 
Para um pesquisa de informação podemos utilizar LINQ to XML. Neste caso, para procurar todos os registo que com a palavra "Selo":

Dim bookSearch = From b In bookList...<book>_
                 Where b.@name.ToString.Contains("Selo") _
                 Select b.@name, b.@author

For Each book In From element In bookSearch
    Debug.WriteLine("Livro: "& book.name)
    Debug.WriteLine("Autor: " & book.author)

    ' Linha de separação
   
Debug.WriteLine(New String("-"c, 40))
Next

 
Finalmente, podemos gravar para o disco, o XML que se encontra em memória

bookList.Save("d:\LivrosRevistas.xml")

 
É um exemplo simples de como ler informação utilizando XML Literals e LINQ to XML, que mostra que nunca foi tão fácil trabalhar com ficheiro XML.

Para breve mais exemplos sobre XML Literals!


VBRocks Blog

Gary Lima, aka VBRocks, iniciou-se recentemente no mundo dos blogs. É um bom amigo e o seu contributo em diversas comunidades técnicas fizeram que seja Microsoft MVP desde 2008.

Para já, já estão disponíveis alguns bons artigos como:

Extension Methods
Delegates
Calculating a Bar Graph Scale
ADO.NET: SqlBulkCopy
ADO.NET: DataTables, In-depth
ADO.NET: DataTables, An Introduction

Para breve ele promete mais!

Aqui fica um blog a ter em conta para todos os amantes de VB

http://garylima.blogspot.com/


VB.NET: Criar botão para exportar os Microsoft Reports

Como explicado e demonstrado em artigos anteriores, os Microsoft Reports podem exportar directamente para 3 formatos: Microsoft Excel, Adobe Acrobat e Imagem.

Para simplificar o processo de escolha ao utilizador, resolvi criar um botão personalizado, utilizando um ContextMenuStrip, que permita ao utilizador, seleccionar uma opção de exportação. Para diferenciar dos outros botões, resolvi desenhar um triângulo, indicando que irá expandir-se.

Simples, mas prático e simples de utilizar, e como poderá ter interesse para outros programadores, resolvi partilhar o código. Além disso, mostra como desenhar um objecto, através do método FillPolygon().

Para começar é necessário criar uma classe que irá herdar as propriedades de um Windows.Forms.Button

Imports System.Configuration

Public Class PopupButton
    Inherits Windows.Forms.Button

    Public WithEvents PopupButtonMenuStrip As ContextMenuStrip
    Private exportOptions As List(Of String)

#Region "Propriedades"

  
Private m_ArrowWidth As Integer
  
'''<summary>
  
''' Define o tamanho(horizontal)
    '''
</summary>
  
Public Property ArrowWidth() As Integer
         Get 
             Return
m_ArrowWidth
        End Get
        Set
(ByVal value As Integer)
            m_ArrowWidth = value
        End Set
    End Property

    Private
m_ArrowHeight As Integer
  
'''<summary>
  
''' Define o tamanho(vertical)
    '''
</summary>
  
Public Property ArrowHeight() As Integer
        Get
            Return
m_ArrowHeight
        End Get
        Set
(ByVal value As Integer)
            m_ArrowHeight = value
        End Set
    End Property


    Private
m_ArrowBrushColor As Brush
    '''<summary>
  
''' Define a cor da seta
    '''
</summary>
  
Public Property ArrowBrushColor() As Brush
        Get
            Return
m_ArrowBrushColor
        End Get
        Set
(ByVal value As Brush)
            m_ArrowBrushColor = value
        End Set
    End Property

#End Region


#Region
"Construtor"

  
Sub New()

        ' Algumas pré-definições da seta 
       
Me.ArrowWidth = 14
        Me.ArrowHeight = 14
        Me.ArrowBrushColor = Brushes.DarkGray

        ' Opções de exportação
       
exportOptions = New List(Of String)
        exportOptions.Add("Microsoft Excel (*.xls)")
        exportOptions.Add("Adobe Acrobat (*.pdf)")
        exportOptions.Add("Imagem (*.jpg)")


        Me.PopupButtonMenuStrip = New ContextMenuStrip

        ' Adiciona os itens ao menu
      
With Me.PopupButtonMenuStrip
         .Items.Add(New ToolStripMenuItem() With {.Text = exportOptions(0).ToString})
         .Items.Add(New ToolStripMenuItem() With {.Text = exportOptions(1).ToString})
         .Items.Add(New ToolStripMenuItem() With {.Text = exportOptions(2).ToString})
        End With

    End Sub

#End Region


    Enum
output
        Excel
        PDF
        Image
    End Enum


  
' Definição de um evento para quando for seleccionada uma opção
  
Public Event PopupButtonMenuClick(ByVal sender As Object, _
          ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs, _
          ByVal output As output)


    '''<summary>
  
''' Mostra o ContextMenuStrip
    '''
</summary>
  
Private Sub popupButton_Click(ByVal sender As Object, _
                ByVal e As System.EventArgs) Handles Me.Click

        Me.PopupButtonMenuStrip.Show(Me, New Point(0, Me.Height))

    End Sub


   
''' <summary>
   
''' Desenha a seta no botão alinhada à direita
    '''
</summary>
   
Private Sub popupButton_Paint(ByVal sender As Object, _ 
           ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint 

     Dim h As Integer = (Me.Height / 2) + 3 
     Dim w As Integer = Me.Width - 15 ' offset 

    
Dim points As New List(Of Point) 
     points.Add(New Point(w - (Me.ArrowWidth / 2), h - (Me.ArrowHeight / 2))) 
     points.Add(New Point(w, h)) 
     points.Add(New Point(w + (Me.ArrowWidth / 2), h - (Me.ArrowHeight / 2))) 

    e.Graphics.FillPolygon(Me.ArrowBrushColor, points.ToArray)

    End Sub


  
'''<summary>
  
''' Chama o evento PopupButtonMenuClick
    '''
</summary>
  
Private Sub PopupButtonMenuStrip_ItemClicked(ByVal sender As Object, _
            ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) _ 
            Handles PopupButtonMenuStrip.ItemClicked

        Select Case e.ClickedItem.Text

            Case exportOptions(0).ToString
                RaiseEvent PopupButtonMenuClick(sender, e, output.Excel)

            Case exportOptions(1).ToString
                RaiseEvent PopupButtonMenuClick(sender, e, output.PDF)

            Case exportOptions(2).ToString
                RaiseEvent PopupButtonMenuClick(sender, e, output.Image)

        End Select

    End Sub


End Class

Após compilado o projecto, este botão (PopupButton), irá estar disponível na Toolbox.

Finalmente, após arrastar o botão para o Form, utiliza-se o evento PopupButtonMenuClick para verificar e definir que tipo de exportação fazer:

Private Sub btnExportar_PopupButtonMenuClick(ByVal sender As Object, _
         ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs, _
         ByVal output As PopupButton.output) _
         Handles btnExportar.PopupButtonMenuClick

    Select Case output

        Case PopupButton.output.Excel
            Debug.WriteLine("Exportar para Excel")

        Case PopupButton.output.Image
            Debug.WriteLine("Exportar para Imagem")

        Case PopupButton.output.PDF
            Debug.WriteLine("Exportar para PDF")

    End Select

End Sub


Muito simples de utilizar, mas poderá simplificar o processo de selecção do tipo de exportação sem recorrer a um Form especifico ou sem utilizar múltiplos botões.

Espero que seja útil!




Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico