IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

ReportViewer Personnaliser bouton Imprimer


Sujet :

Windows Forms

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Points : 0
    Points
    0
    Par défaut ReportViewer Personnaliser bouton Imprimer
    Bonjour,

    J'ai développé une application en VB.net (2005) dans laquelle les utilisateurs peuvent visualiser et imprimer un état dynamique.

    Tout marche bien, maintenant je veux faire un traitement spécifique lorsque les utilisateurs visualisent les documents et valident l'impression (Mais Rien faire lorsque les utilisateurs cliquent sur annuler).

    J'ai essayé d'implémenter la solution en utilisant le code ci-dessous. Cependant avec ce code le PrintDialog s'affiche deux fois et le traitement spécifique ne s’exécute que lorsque l'impression est validée dans le deuxième PrintDialog.

    Ma question est comment désactiver le lancement du PrintDialog par défaut (Le premier) ou comment intercepter la valeur de son DialogResult afin de ne pas instancier le deuxième PrintDialog (My_PrintDialog)

    A- Code exécuté lors du rechargement du ReportViewer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
        Private Sub My_CrystalReportViewer_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles My_CrystalReportViewer.Load
     
            Try
     
     
                For Each Current_Ctrl As Control In My_CrystalReportViewer.Controls
     
                    If TypeOf Current_Ctrl Is Windows.Forms.ToolStrip Then
     
                        For Each Item As Object In CType(Current_Ctrl, ToolStrip).Items
     
                            If Item.AccessibleName = "Print Report" Then
     
                                Dim My_Print_Button As ToolStripButton = CType(Item, ToolStripButton)
     
     
                                AddHandler My_Print_Button.Click, AddressOf Upgrade_Print_Button_Click
     
                                Exit For
     
                            End If
     
                        Next
     
                    End If
     
                Next
     
     
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
     
     
        End Sub
    B. Code Exécuter lorsque l'utilisateur clique sur le bouton Imprimer du ReportViewer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
        Private Sub Upgrade_Print_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
     
            Dim My_PrintDialog As New PrintDialog
     
            If My_PrintDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
     
     
                Me.My_CrystalReportViewer.ReportSource.PrintOptions.PrinterName = My_PrintDialog.PrinterSettings.PrinterName
                Me.My_CrystalReportViewer.ReportSource.PrintToPrinter(My_PrintDialog.PrinterSettings.Copies, My_PrintDialog.PrinterSettings.Collate, My_PrintDialog.PrinterSettings.FromPage, My_PrintDialog.PrinterSettings.ToPage)
     
                '' Faire le traitement spécifique
     
            Else
     
                '' Rien Faire
            End If
     
     
        End Sub

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 128
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 128
    Points : 1 638
    Points
    1 638
    Par défaut
    Dans ce que tu montres, je ne vois pas où pourrait être le 1er affichage de la PrintDialog, à moins que le bouton déclencheur ne soit déjà associer à un autre événement click qui demande une impression (et que l'on ne voit pas ici).
    Si c'est le cas, il faut retirer de cet événement le Handle correspondant au bouton

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par umfred Voir le message
    Dans ce que tu montres, je ne vois pas où pourrait être le 1er affichage de la PrintDialog, à moins que le bouton déclencheur ne soit déjà associer à un autre événement click qui demande une impression (et que l'on ne voit pas ici).
    Si c'est le cas, il faut retirer de cet événement le Handle correspondant au bouton
    Le premier affichage du PrintDialog correspond au évènement Click par défaut du bouton Imprimer du ReportViewer. C'est celui là que je veux désactiver.

    Le deuxième affichage est celui déclencher par le handler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddHandler My_Print_Button.Click, AddressOf Upgrade_Print_Button_Click

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 675
    Points : 5 260
    Points
    5 260
    Par défaut
    Ce n'est pas une bonne idée de vouloir enlever le comportement par défaut du bouton imprimer du Viewer.
    En effet, cela implique de recoder le comportement derrière ce bouton (sinon, il ne fera plus rien)
    Et tu ne pourras pas le faire ou pas complètement.

    Plutôt que rajouter du code sur ce bouton, il faut se brancher sur le bon événement.
    Regarde du coté de AfterRender.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par popo Voir le message
    Ce n'est pas une bonne idée de vouloir enlever le comportement par défaut du bouton imprimer du Viewer.
    En effet, cela implique de recoder le comportement derrière ce bouton (sinon, il ne fera plus rien)
    Et tu ne pourras pas le faire ou pas complètement.

    Plutôt que rajouter du code sur ce bouton, il faut se brancher sur le bon événement.
    Regarde du coté de AfterRender.
    Pourriez vous me donner un exemple sur l'exploitation de l'évènement AfterRender d'un bouton du ToolStrip.

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 675
    Points : 5 260
    Points
    5 260
    Par défaut
    Citation Envoyé par Mouloudeen1921 Voir le message
    Pourriez vous me donner un exemple sur l'exploitation de l'évènement AfterRender d'un bouton du ToolStrip.
    Non, puisqu'un bouton n'a pas d'événement AfterRender.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par popo Voir le message
    Non, puisqu'un bouton n'a pas d'événement AfterRender.
    Donc la solution qui reste est de chercher comment intercepter la valeur du DialogResult retourner par le premier PrintDialog (Celui par Défaut)

  8. #8
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 675
    Points : 5 260
    Points
    5 260
    Par défaut
    Pourquoi vous vous entêtez à vouloir détourner les boutons ?
    Ce ne sont pas les boutons qui font les traitements, ils se contentent de les lancer.

    Le clic sur le bouton "Imprimer" déclenche l'action Render qui est le traitement d'impression.
    Lorsque cette action est terminée l'événement AfterRender est déclenché.

    De la même manière que vous avez branché un événement Load sur My_CrystalReportViewer, vous pouvez y brancher un événement AfterRender.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par popo Voir le message
    Pourquoi vous vous entêtez à vouloir détourner les boutons ?
    Ce ne sont pas les boutons qui font les traitements, ils se contentent de les lancer.

    Le clic sur le bouton "Imprimer" déclenche l'action Render qui est le traitement d'impression.
    Lorsque cette action est terminée l'événement AfterRender est déclenché.

    De la même manière que vous avez branché un événement Load sur My_CrystalReportViewer, vous pouvez y brancher un événement AfterRender.
    Je pense que vous n'avez pas bien compris mon problème.

    Lorsque un utilisateur clique sur le bouton imprimer (du Crystal Report), une boite de dialogue s'affiche permettant de sélectionner l'imprimante, les N° des pages à imprimer, le nombre de copies, etc.

    Le problème c'est qu'une fois sur cette boite de dialogue l'utilisateur peut lancer effectivement l'impression (Bouton Imprimer) comme il peut l'annuler (Bouton Annuler ou X). Moi je veut lancer le lancer le traitement spécifique uniquement lorsque l'utilisateur clique sur le bouton Imprimer.

  10. #10
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 675
    Points : 5 260
    Points
    5 260
    Par défaut
    Citation Envoyé par Mouloudeen1921 Voir le message
    Je pense que vous n'avez pas bien compris mon problème.
    J'ai compris que vous souhaitez lancer un traitement lorsque l'utilisateur valide l'impression du rapport mais pas quand il l'annule.

    Si ce n'est pas cela, veuillez reformuler votre demande avec d'autres termes.
    Si, c'est bien cela, alors je vous suggère de vous pencher sur la documentation des outils que vous utilisez.

    Je le répète le clic sur le bouton "Imprimer" va déclencher l'action Render.
    Il faut alors utiliser l'événement AfterRender pour exécuter une action après l'impression ou l'événement BeforeRender pour exécuter une action avant l'impression.
    https://learn.microsoft.com/en-us/pr...26854(v=vs.90)

    Le clic sur le bouton annuler ne va rien déclencher.

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par popo Voir le message
    J'ai compris que vous souhaitez lancer un traitement lorsque l'utilisateur valide l'impression du rapport mais pas quand il l'annule.

    Si ce n'est pas cela, veuillez reformuler votre demande avec d'autres termes.
    Si, c'est bien cela, alors je vous suggère de vous pencher sur la documentation des outils que vous utilisez.

    Je le répète le clic sur le bouton "Imprimer" va déclencher l'action Render.
    Il faut alors utiliser l'événement AfterRender pour exécuter une action après l'impression ou l'événement BeforeRender pour exécuter une action avant l'impression.
    https://learn.microsoft.com/en-us/pr...26854(v=vs.90)

    Le clic sur le bouton annuler ne va rien déclencher.
    Je ne savais pas que les évènements AfterRender & BeforeRender sont disponibles dans Windows Form Applications. Je vais faire des recherche sur ça.

  12. #12
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 675
    Points : 5 260
    Points
    5 260
    Par défaut
    Ces événements sont liés à CrystalReport.
    Le fait que vous ayez une projet de type Windows Form n'entre pas en considération.

    Au passage, vous n'êtes pas obligé de répondre à un message en le citant complètement.
    Surtout s'il s'ait du dernier message.

Discussions similaires

  1. [Librairie] bouton imprimer avec php
    Par scastong dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 21/05/2009, 13h46
  2. Réponses: 16
    Dernier message: 10/11/2006, 14h09
  3. bouton imprimer
    Par somatino dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 26/03/2006, 19h50
  4. Bouton imprimer
    Par baj dans le forum Access
    Réponses: 1
    Dernier message: 17/02/2006, 16h01
  5. bouton imprimer sur imprimante precise!
    Par NoobX dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/10/2005, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo