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
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!
6 comentários:
Bom post. ;)
Apenas na linha 120 da classe, mais concretamente a: points.Add(NewPoint(w + (Me.ArrowWidth / 2), h - (Me.ArrowHeight / 2)))
devia ser:
points.Add(New Point(w + (Me.ArrowWidth / 2), h - (Me.ArrowHeight / 2)))
Obrigado pela correcção Scorch!
O SyntaxHighlighter que uso junta muitas keywords(não sei qual o motivo), e tenho sempre de corrigir alguma coisa, mas esta passou-me.
Já está corrigido :)
Eu tenho que fazer uma PAP (prova de aptidao profissional) ate agora os profes nao ensinaram rigorosamente nada. Se me arranjaxem manuais ou algo que me ajude agradecia tou a zeros mesmo. tenho que criar um software tipo powerpoint ajundem.... bgd
Boas,
Podes encontrar alguma informação interessante em Recursos de Aprendizagem. Existe informação muito interessante para iniciar.
Podes também colocar as tuas dúvida na comunidade Portugal a Programar
Espero que ajude!
Teria como colocar ícones no menu estilo toolstripmenuitem?
Enviar um comentário