• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

metaclay

[RESOLVIDO] Imprimir conteudo do item da listbox

25 mensagens neste tópico

Boas. Estou a desenvolver uma aplicação em que o objectivo é carregar os ficheiros duma pasta à escolha para uma listbox para que possa imprimir o item selecionado dessa listbox. O problema que estou a confrontar é a básica propriedade da seleçao do item.

Em suma, quero imprimir o item selecionado da listbox mas nao sei qual é a propriedade para selecionar o item que quero.

Código que tenho até agora:

- Carregamento dos documentos da pasta

Private Sub btn_carregardados_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_carregar.Click
        Dim dir As New IO.DirectoryInfo("c:\dossier")

        Label1.Text = dir.ToString

        Dim files As IO.FileInfo() = dir.GetFiles("*.txt")

        Dim fileName As IO.FileInfo
        For Each fileName In files
            ListBox1.Items.Add(fileName.Name)
        Next


    End Sub

- Parte da impressao

Dim i As Integer
       
        For i = 1 To ListBox1.Items.Count  ' Percorrer todos os items'
            
            If ListBox1.Items(i).Checked = True Then 'Aqui é a parte que quero saber qual a propriedade para trabalhar com o item selecionado '
                PrintDocument1.Print()
            End If
        Next

Aguardo ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para obteres o Indice do Item selecionado não carece cclo de pequisa, usa a propriedade SelectedIndex

Convém saber que o 1º item =0 e o último é [items.Count - 1, e para obter o valor do item Items(Index)

A ListBox só permite selecionar um item de cada vez, já para selecionar vários usa a CheckedListBox e para mais que uma coluna existe a ListView.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não entendi bem o problema mas ve se isto te ajuda.

If ListBox1.Items(i).Checked = True Then 'Aqui é a parte que quero saber qual a propriedade para trabalhar com o item selecionado '
               ListBox1.Items.Item(ListBox1.SelectedIndex)
End If

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema que estou a confrontar é a básica propriedade da seleçao do item.

Em suma, quero imprimir o item selecionado da listbox mas nao sei qual é a propriedade para selecionar o item que quero.

Para seleccionar e, exibir o nome do item seleccionado, pode-se fazer algo do género:

Private Sub btnImprimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImprimir.Click

        MsgBox("Seleccionou o item: " & ListBox1.SelectedItem)

    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que vocês nao perceberam o que eu quero. Vou tentar explicar outra vez duma forma mais simplificada...

Desde já, deixo um print screen da aplicação

14bt0rr.jpg

Portanto, o objectivo deste programa é: através do botão 'Imprimir', fazer a impressão, para a impressora predefenida da rede, do documento selecionado na listbox, consoante o nº de cópias que o utilizador colocar. O objecto a usar é o 'PrintDocument' . Como fazer isto?

Espero que tenham percebido a minha ideia agora :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pergunto porque o "PrintDocument" não faz o que parece que julgas que faça.

Não indicas um documento e imprimes.

Com o printdocument tens de literalmente desenhar o documento.

No caso dos TXT é simples, basta escrever linhas controlando os limites horizontais e o número de linhas por página.

Quanto aos PDF, já tens mais voltinhas para dar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então podes sugerir-me outro objecto que faça impressão de documentos?

Eu só nao queria que aparecesse a janela de impressão quando carregasse em imprimir, mas que imprimisse directamente...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não precisas printdocument...

   

        Dim p As New System.Diagnostics.ProcessStartInfo()
        p.Verb = "print"
        p.WindowStyle = ProcessWindowStyle.Hidden
        p.FileName = "C:\a.txt"
        p.UseShellExecute = True
        System.Diagnostics.Process.Start (p)
    [code]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Continua a não funcionar Gooden :\

btw, nao tenho de fazer um if para saber se o item da listbox está selecionado?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

metaclay tenta criar 1 ficheiro txt no c:\ com o nome a.txt e imprimir

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

metaclay tenta criar 1 ficheiro txt no c:\ com o nome a.txt e imprimir

Ja deu mas ainda não é exactamente o que quero fazer. Como faço para imprimir todos os ficheiros que acabem em ".txt" e que estejam na pasta "C:/dossier" ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso e simples como fazer panquecas :thumbsup:

        If IO.Directory.Exists("c:\Dossier") Then
            Dim di As New IO.DirectoryInfo("C:\Dossier")
            Dim aryFi As IO.FileInfo() = di.GetFiles("*.txt")
            Dim fi As IO.FileInfo

            For Each fi In aryFi
                Dim p As New System.Diagnostics.ProcessStartInfo()
                p.Verb = "print"
                p.WindowStyle = ProcessWindowStyle.Hidden
                p.FileName = fi.FullName
                p.UseShellExecute = True
                System.Diagnostics.Process.Start(p)
            Next
        Else
            MsgBox("Pasta Não Existe")
        End If

atenção se não existir pasta da erro... fiz uma verificação de pasta se necessário

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É isso mesmooo :thumbsup:

só falta mesmo uma coisa, quero que seja so impresso o ficheiro que tiver selecionado na listbox...

Como fazer isso? :s

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ListBox1.Items.Add("a.txt")
        ListBox1.Items.Add("b.pdf")
        ListBox1.Items.Add("Exame.txt")
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If IO.Directory.Exists("c:\dossier") Then
            Dim strFileSize As String = ""
            Dim di As New IO.DirectoryInfo("C:\dossier")
            Dim aryFi As IO.FileInfo() = di.GetFiles(ListBox1.Text)
            Dim fi As IO.FileInfo

            For Each fi In aryFi
                Dim p As New System.Diagnostics.ProcessStartInfo()
                p.Verb = "print"
                p.WindowStyle = ProcessWindowStyle.Hidden
                p.FileName = fi.FullName
                p.UseShellExecute = True
                System.Diagnostics.Process.Start(p)
            Next
        Else
            MsgBox("Pasta Não Existe")
        End If
    End Sub

isto???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nao, os items da listbox sao adicionados por uma funçao que eu ja implementei:

Private Sub btn_carregardados_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_carregar.Click
        Dim dir As New IO.DirectoryInfo("c:\dossier")

        Label1.Text = dir.ToString

        Dim files As IO.FileInfo() = dir.GetFiles("*.txt")

        Dim fileName As IO.FileInfo
        For Each fileName In files
            ListBox1.Items.Add(fileName.Name)
        Next


    End Sub

Escolhendo um dos items, o conteudo do ficheiro que está descrito na listbox, será impresso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu adicioneis manualmente... mas e so fazeres 1 botão e inserires o código que fiz no buton click

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

AFINAL já funciona :thumbsup:

diz-me só mais uma coisa, neste código:

Dim dir As New IO.DirectoryInfo("c:\dossier")

        Label1.Text = dir.ToString

        Dim files As IO.FileInfo() = dir.GetFiles("*.txt")

        Dim fileName As IO.FileInfo
        For Each fileName In files
            ListBox1.Items.Add(fileName.Name)
        Next

na linha de código:

Dim files As IO.FileInfo() = dir.GetFiles("*.txt")

sabes como é que adiciono mais extensões além do .txt?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Afinal já nao preciso da tua ajuda quanto aos outros tipos de ficheiro ;D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não da.. faz antes assim

   
        Dim strFilter As String = "*.txt;*.pdf;*.doc"
        Dim m_arExt As String() = strFilter.Split(";"c)
        For Each filter As String In m_arExt

            Dim dir As New IO.DirectoryInfo("c:\dossier")

            Dim files As IO.FileInfo() = dir.GetFiles(filter)

            Dim fileName As IO.FileInfo
            For Each fileName In files
                ListBox1.Items.Add(fileName.Name)
            Next
        Next

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nao precisei desse ultimo bloco de código porque arranjei outra solução mas obrigado na mesma ;D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E explicar a solução porque afinal é disso que a comunidade trata :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Resolução:

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents btn_carregar As System.Windows.Forms.Button
    Friend WithEvents txtbox_num As System.Windows.Forms.TextBox
    Friend WithEvents Button2 As System.Windows.Forms.Button
    Friend WithEvents Label2 As System.Windows.Forms.Label
    Friend WithEvents ListBox1 As System.Windows.Forms.ListBox
    Friend WithEvents Label1 As System.Windows.Forms.Label
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.btn_carregar = New System.Windows.Forms.Button
        Me.Label1 = New System.Windows.Forms.Label
        Me.txtbox_num = New System.Windows.Forms.TextBox
        Me.Button2 = New System.Windows.Forms.Button
        Me.Label2 = New System.Windows.Forms.Label
        Me.ListBox1 = New System.Windows.Forms.ListBox
        Me.SuspendLayout()
        '
        'btn_carregar
        '
        Me.btn_carregar.BackColor = System.Drawing.Color.Silver
        Me.btn_carregar.FlatStyle = System.Windows.Forms.FlatStyle.Flat
        Me.btn_carregar.Location = New System.Drawing.Point(75, 2)
        Me.btn_carregar.Name = "btn_carregar"
        Me.btn_carregar.Size = New System.Drawing.Size(119, 24)
        Me.btn_carregar.TabIndex = 1
        Me.btn_carregar.Text = "Carregar"
        Me.btn_carregar.UseVisualStyleBackColor = False
        '
        'Label1
        '
        Me.Label1.Location = New System.Drawing.Point(204, 3)
        Me.Label1.Name = "Label1"
        Me.Label1.Size = New System.Drawing.Size(119, 23)
        Me.Label1.TabIndex = 2
        Me.Label1.Text = "Label1"
        '
        'txtbox_num
        '
        Me.txtbox_num.Location = New System.Drawing.Point(203, 138)
        Me.txtbox_num.Name = "txtbox_num"
        Me.txtbox_num.Size = New System.Drawing.Size(116, 20)
        Me.txtbox_num.TabIndex = 3
        '
        'Button2
        '
        Me.Button2.BackColor = System.Drawing.Color.Silver
        Me.Button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat
        Me.Button2.Location = New System.Drawing.Point(203, 164)
        Me.Button2.Name = "Button2"
        Me.Button2.Size = New System.Drawing.Size(116, 23)
        Me.Button2.TabIndex = 4
        Me.Button2.Text = "Imprimir"
        Me.Button2.UseVisualStyleBackColor = False
        '
        'Label2
        '
        Me.Label2.AutoSize = True
        Me.Label2.Location = New System.Drawing.Point(203, 118)
        Me.Label2.Name = "Label2"
        Me.Label2.Size = New System.Drawing.Size(68, 13)
        Me.Label2.TabIndex = 5
        Me.Label2.Text = "Nº de copias"
        '
        'ListBox1
        '
        Me.ListBox1.FormattingEnabled = True
        Me.ListBox1.Location = New System.Drawing.Point(203, 29)
        Me.ListBox1.Name = "ListBox1"
        Me.ListBox1.Size = New System.Drawing.Size(120, 82)
        Me.ListBox1.TabIndex = 6
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.BackgroundImage = Global.WindowsApplication3.My.Resources.Resources.cartao_ikware_300x1941
        Me.ClientSize = New System.Drawing.Size(325, 197)
        Me.Controls.Add(Me.ListBox1)
        Me.Controls.Add(Me.Label2)
        Me.Controls.Add(Me.Button2)
        Me.Controls.Add(Me.txtbox_num)
        Me.Controls.Add(Me.Label1)
        Me.Controls.Add(Me.btn_carregar)
        Me.MaximizeBox = False
        Me.Name = "Form1"
        Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
        Me.Text = "Imprimir @ IKWare"
        Me.ResumeLayout(False)
        Me.PerformLayout()

    End Sub

#End Region



    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load



    End Sub

    Private Sub btn_carregardados_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_carregar.Click
        Dim dir As New IO.DirectoryInfo("c:\dossier")

        Label1.Text = dir.ToString

        Dim files As IO.FileInfo() = dir.GetFiles("*.*")

        Dim fileName As IO.FileInfo
        For Each fileName In files
            ListBox1.Items.Add(fileName.Name)
        Next


    End Sub

    Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim num_copias As Integer
        Dim num As Integer = 1
        num_copias = CInt(txtbox_num.Text)

        While num <= num_copias

            If IO.Directory.Exists("c:\dossier") Then
                Dim strFileSize As String = ""
                Dim di As New IO.DirectoryInfo("C:\dossier")
                Dim aryFi As IO.FileInfo() = di.GetFiles(ListBox1.Text)
                Dim fi As IO.FileInfo

                For Each fi In aryFi
                    Dim p As New System.Diagnostics.ProcessStartInfo()
                    p.Verb = "print"
                    p.WindowStyle = ProcessWindowStyle.Hidden
                    p.FileName = fi.FullName
                    p.UseShellExecute = True
                    System.Diagnostics.Process.Start(p)
                Next
            Else
                MsgBox("Pasta Não Existe")
            End If

            num = num + 1
        End While


       

    End Sub

    Private Sub PrintDocument1_PrintPage_1(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)

    End Sub

End Class


Feito em vb.net :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora