Imprimer une textbox [Résolu]

cs_mohellebi 103 Messages postés mercredi 31 octobre 2007Date d'inscription 10 juin 2018 Dernière intervention - 17 sept. 2015 à 22:15 - Dernière réponse : Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention
- 4 oct. 2015 à 11:55
Bonjour,
j'ai réalisé une application vb 2010/sql serveur 2008.
pour l'impression des états ou autre j'ai pour habitude d'utiliser crystal report.
maintenant, les utilisateurs ont exprimé le besoin d'imprimer directement depuis la forme, c'est à dire le contenu des textbox,combobx..ect sans même passer par la prévisualisation , comme un ticket de caisse par exemple.
ayant aucune idée d'où je pourrai commencer, si possible de m'orienter sur un tuto ou un code qui m'aidera à m'en sortir de cette galère.
Merci d'avance de votre aide
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 18/09/2015 à 04:41
1
Merci
Bonjour,
- discussion déplacée vers le sous-forum adéquat (VB.Net). Prends s'il te plait dorénavant ce soin.
-
http://www.dreamincode.net/forums/topic/44150-printing-in-vbnet/

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.

Merci ucfoutu 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de ucfoutu
cs_mohellebi 103 Messages postés mercredi 31 octobre 2007Date d'inscription 10 juin 2018 Dernière intervention - 19 sept. 2015 à 01:25
0
Merci
Bonsoir,
Merci ucfoutu pour le lien , je concurrencerai à l'exploiter demain ensuite je reviendrai vers vous
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 20 sept. 2015 à 12:51
Mais qui donc voulez-vous concurrencer ?
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention > Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 20 sept. 2015 à 13:28
Tiens ! un autre "sénile" !
Salut, ami ...
cs_mohellebi 103 Messages postés mercredi 31 octobre 2007Date d'inscription 10 juin 2018 Dernière intervention > ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 20 sept. 2015 à 15:17
Vraiment désolé le mot n'avait rien à faire là, je voulais juste dire "je l'exploiterai demain et ...." une bêtise de ma part
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention > cs_mohellebi 103 Messages postés mercredi 31 octobre 2007Date d'inscription 10 juin 2018 Dernière intervention - 20 sept. 2015 à 19:06
Mais non, cs_mohellebi ! ===>> Tu n'étais nullement concerné ! Juste une partie de rigolade entre deux "vieux" ...un dimanche ...
cs_mohellebi 103 Messages postés mercredi 31 octobre 2007Date d'inscription 10 juin 2018 Dernière intervention > ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 2 oct. 2015 à 23:00
wé par fois rigoler est la meilleur chose à faire pour oublier un peu les bugs des programmes
Commenter la réponse de cs_mohellebi
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 23 sept. 2015 à 17:49
0
Merci
Bonsoir cs_mohellebi.
Avez-vous avancé un peu ?
Cordialement.
cs_mohellebi 103 Messages postés mercredi 31 octobre 2007Date d'inscription 10 juin 2018 Dernière intervention - 2 oct. 2015 à 22:54
Bonsoir tout le monde,
désolé pour le retard car j'était sur d'autre programme afin d'avancer et laisser ce problème pour la fin
alors, j'ai suivi le tuto que ucfoutu m'avait recommandé étape par étape et j'avoue que j'ai pas totalement pigé , maintenant et après avoir écrit tout le programme dans une classe, reste le teste là je bloque sur l'exécution de cette classe
Merci d'avance pour tout les efforts que vous consacrez aux nombres
voila la classe pour imprimer un label

Public Class PCPrint : Inherits Printing.PrintDocument
#Region " Property Variables "

    ''' <summary>
    ''' Property variable for the Font the user wishes to use
    ''' </summary>
    ''' <remarks></remarks>
    Private _font As Font
    ''' <summary>
    ''' Property variable for the text to be printed
    ''' </summary>
    ''' <remarks></remarks>
    Private _text As String

#End Region

#Region " Class Properties "
    ''' <summary>
    ''' Property to hold the text that is to be printed
    ''' </summary>
    ''' <value></value>
    ''' <returns>A string</returns>
    ''' <remarks></remarks>
    Public Property TextToPrint() As String
        Get
            Return _text
        End Get
        Set(ByVal Value As String)
            _text = Value
        End Set
    End Property
    ''' <summary>

    ''' Property to hold the font the users wishes to use
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property PrinterFont() As Font
        ' Allows the user to override the default font
        Get
            Return _font
        End Get
        Set(ByVal Value As Font)
            _font = Value

        End Set
    End Property

#End Region



#Region " Class Constructors "
    ''' <summary>
    ''' Empty constructor
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New()
        'Call the base classes constructor
        MyBase.New()
        'Instantiate out Text property to an empty string

        _text = String.Empty

    End Sub



    ''' <summary>
    ''' Constructor to initialize our printing object
    ''' and the text it's supposed to be printing
    ''' </summary>
    ''' <param name="str">Text that will be printed</param>
    ''' <remarks></remarks>

    Public Sub New(ByVal str As String)

        'Call the base classes constructor

        MyBase.New()

        'Set our Text property value

        _text = str

    End Sub

#End Region




#Region " onbeginPrint "

    ''' <summary>
    ''' Override the default onbeginPrint method of the PrintDocument Object
    ''' </summary>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Protected Overrides Sub onbeginPrint(ByVal e As Printing.PrintEventArgs)
        ' Run base code
        MyBase.onbeginPrint(e)

        'Check to see if the user provided a font
        'if they didnt then we default to Times New Roman
        If _font Is Nothing Then
            'Create the font we need
            _font = New Font("Times New Roman", 10)
        End If
    End Sub
#End Region




#Region " OnPrintPage "

    ''' <summary>
    ''' Override the default OnPrintPage method of the PrintDocument
    ''' </summary>
    ''' <param name="e"></param>
    ''' <remarks>This provides the print logic for our document</remarks>

    Protected Overrides Sub OnPrintPage(ByVal e As Printing.PrintPageEventArgs)

        ' Run base code

        MyBase.OnPrintPage(e)



        'Declare local variables needed

        Static curChar As Integer

        Dim printHeight As Integer

        Dim printWidth As Integer

        Dim leftMargin As Integer

        Dim rightMargin As Integer

        Dim lines As Int32

        Dim chars As Int32



        'Set print area size and margins

        With MyBase.DefaultPageSettings

            printHeight = .PaperSize.Height - .Margins.Top - .Margins.Bottom

            printWidth = .PaperSize.Width - .Margins.Left - .Margins.Right

            leftMargin = .Margins.Left 'X

            rightMargin = .Margins.Top   'Y

        End With
        'Check if the user selected to print in Landscape mode

        'if they did then we need to swap height/width parameters

        If MyBase.DefaultPageSettings.Landscape Then

            Dim tmp As Integer

            tmp = printHeight

            printHeight = printWidth

            printWidth = tmp

        End If



        'Now we need to determine the total number of lines

        'we're going to be printing

        Dim numLines As Int32 = CInt(printHeight / PrinterFont.Height)


        'Create a rectangle printing are for our document

        Dim printArea As New RectangleF(leftMargin, rightMargin, printWidth, printHeight)



        'Use the StringFormat class for the text layout of our document

        Dim format As New StringFormat(StringFormatFlags.LineLimit)



        'Fit as many characters as we can into the print area     



        e.Graphics.MeasureString(_text.Substring(RemoveZeros(curChar)), PrinterFont, New SizeF(printWidth, printHeight), format, chars, lines)



        'Print the page

        e.Graphics.DrawString(_text.Substring(RemoveZeros(curChar)), PrinterFont, Brushes.Black, printArea, format)



        'Increase current char count

        curChar += chars



        'Detemine if there is more text to print, if

        'there is the tell the printer there is more coming

        If curChar < _text.Length Then

            e.HasMorePages = True

        Else
            e.HasMorePages = False

            curChar = 0

        End If

    End Sub

#End Region

#Region " RemoveZeros "

    ''' <summary>
    ''' Function to replace any zeros in the size to a 1
    ''' Zero's will mess up the printing area
    ''' </summary>
    ''' <param name="value">Value to check</param>
    ''' <returns></returns>
    ''' <remarks></remarks>

    Public Function RemoveZeros(ByVal value As Integer) As Integer

        'Check the value passed into the function,

        'if the value is a 0 (zero) then return a 1,

        'otherwise return the value passed in

        Select Case value

            Case 0

                Return 1

            Case Else

                Return value

        End Select

    End Function
#End Region




#Region " PrintDocument "

    Public Sub PrintDocument()

        'Create an instance of our printer class

        Dim printer As New PCPrint()

        'Set the font we want to use

        printer.PrinterFont = New Font("Verdana", 10)
        'Set the TextToPrint property

        printer.TextToPrint = Form18.NavireLabel.Text

        'Issue print command

        printer.Print()

    End Sub

#End Region


End Class


après j'ai trouvé une petite instruction afin d'imprimer toute la form, mais avec une qualité d'impression trop médiocre

PrintForm1.PrintAction = Printing.PrintAction.PrintToPrinter
        PrintForm1.Print()
Commenter la réponse de Zermelo
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 3 oct. 2015 à 09:55
0
Merci
Bonjour cs_mohellebi.
Vous pouvez aussi essayer la "capture d'image". Ce procédé fournit un bitmap, qui peut être imprimé avec les techniques d'impression de vb.net.
Cordialement.
Commenter la réponse de Zermelo
cs_mohellebi 103 Messages postés mercredi 31 octobre 2007Date d'inscription 10 juin 2018 Dernière intervention - 4 oct. 2015 à 10:40
0
Merci
Merci Zermelo pour ton aide car votre solution d'imprime écran pourra éventuellement me servir dans d'autre cas, cependant voila un code très simple et qui marche nickel
 
'Veuillez insérer le code dans le bouton imprimer 
 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        'PrintForm1.PrintAction = Printing.PrintAction.PrintToPrinter
        '' PrintForm1.Print()
        PrintDocument1.PrinterSettings.Copies = 1
        PrintDocument1.Print()

        Me.Hide()
        Timer1.Stop()

    End Sub


et pour ajuster les objets à imprimer

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


e.Graphics.DrawString(Label1.Text, Label1.Font, Brushes.Black, 100, 50)
e.Graphics.DrawString(agenceLabel.Text, agenceLabel.Font, Brushes.Black, 100, 100)
e.Graphics.DrawString(Label2.Text, Label2.Font, Brushes.Black, 50, 200)

'e.Graphics.DrawString(NavireLabel.Text, NavireLabel.Font, Brushes.Black, 100, 100)
'e.Graphics.DrawString(trajetLabel.Text, trajetLabel.Font, Brushes.Black, 100, 150)
'e.Graphics.DrawString(datevoyageLabel.Text, datevoyageLabel.Font, Brushes.Black, 100, 200)


End Sub

Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 4 oct. 2015 à 11:55
Bravo.
Alors n'oubliez pas de déclarer le sujet résolu.
Salutations.
Commenter la réponse de cs_mohellebi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.