Question : Étiquettes d'impression dans VB.NET

Using System.Drawing.Printing j'envoie le contenu d'une boîte à textes à l'imprimeur.  Cependant, je perds les étiquettes dans la boîte à textes.  Est-ce que n'importe qui peut me fournir une certaine méthode qui permettra les étiquettes ?  Actuellement elles obtiennent mangées avant printing.

Thanks.
class= de

Réponse : Étiquettes d'impression dans VB.NET

Bonjour, hbash,

Oui, est ce ce que j'ai espéré voir.   Les additions dont vous avez besoin sont relativement peu.

Pour démontrer ce que vous devez faire, j'ai créé une forme simple avec un bouton et ai ajouté votre classe iHandlePrinting à elle.  Le code derrière le bouton est essentiellement identique que votre sous-routine de PrintDocument () et est montré dans l'extrait suivant.  J'ai également montré la version modifiée de la classe iHandlePrinting.  Pour la rendre facile de trouver les lignes affectées, je les ai marquées avec un commentaire qui commence par les caractères « ~~~ ».

Vous verrez en mon code d'échantillon pour le bouton de forme que j'ai substitué une corde codée dure à votre propriété de TextBox.Text.  Pour votre code, enlever juste les lignes avec de la corde et l'uncomment hardcoded la ligne originale.  

J'ai également changé deux lignes dans la classe iHandlePrinting qui ne se rapportent pas aux arrêts de tabulatrice.  J'ai marqué ces derniers avec des commentaires commençant par les caractères « ~~~* ».  Je recommande fortement que vous employez la « option explicite » et la « option stricte » en tout de votre codage.  Le petit effort supplémentaire qu'il exige vous sauvera de beaucoup de problèmes et maux de tête de codage mystérieux.

Ah, et juste comme une note latérale, beaucoup (peut-être de la plupart des) codeurs emploient une convention de nomination où la première lettre du nom de votre classe iHandlePrinting pourrait suggérer que ce soit une interface plutôt qu'une classe.  (Évidemment, haut de casse « je » est employé plus fréquemment que la lettre minuscule.)

À la votre,
Randy
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 :
37 :
38 :
39 :
40 :
41 :
42 :
43 :
44 :
45 :
46 :
47 :
48 :
49 :
50 :
51 :
52 :
53 :
54 :
55 :
56 :
57 :
58 :
59 :
60 :
61 :
62 :
63 :
64 :
65 :
66 :
67 :
68 :
69 :
70 :
71 :
72 :
73 :
74 :
75 :
76 :
77 :
78 :
79 :
80 :
81 :
82 :
83 :
84 :
85 :
86 :
87 :
88 :
89 :
90 :
91 :
92 :
93 :
94 :
95 :
96 :
97 :
98 :
99 :
100 :
101 :
102 :
103 :
104 :
105 :
106 :
107 :
108 :
109 :
110 :
111 :
112 :
113 :
114 :
115 :
116 :
117 :
118 :
119 :
120 :
121 :
122 :
123 :
124 :
125 :
126 :
127 :
128 :
129 :
130 :
131 :
132 :
133 :
134 :
135 :
136 :
137 :
138 :
139 :
140 :
141 :
142 :
143 :
144 :
145 :
146 :
147 :
148 :
149 :
150 :
151 :
152 :
153 :
154 :
155 :
156 :
157 :
158 :
159 :
160 :
161 :
162 :
163 :
164 :
165 :
166 :
167 :
168 :
169 :
170 :
171 :
172 :
173 :
174 :
175 :
176 :
177 :
178 :
179 :
180 :
181 :
182 :
183 :
184 :
185 :
186 :
187 :
188 :
189 :
190 :
191 :
192 :
193 :
194 :
195 :
196 :
197 :
198 :
199 :
200 :
201 :
202 :
203 :
204 :
205 :
206 :
207 :
208 :
209 :
210 :
211 :
212 :
213 :
214 :
215 :
216 :
217 :
218 :
219 :
220 :
221 :
222 :
223 :
224 :
225 :
226 :
227 :
228 :
229 :
230 :
231 :
232 :
233 :
234 :
235 :
236 :
237 :
238 :
239 :
240 :
241 :
242 :
243 :
244 :
245 :
246 :
247 :
248 :
249 :
250 :
251 :
252 :
253 :
254 :
255 :
Classe publique Form1

    Le sous-marin privé Button1_Click (expéditeur de ByVal comme System.Object, ByVal e comme System.EventArgs) manipule Button1.Click

        Le faible strToPrint comme corde = « voici » et vbTab et « corde avec le quelque » et vbTab et _
                                   « a inclus les arrêts de tabulatrice » et le vbTab et « et » et le vbCrLf et le _
                                   vbTab et vbTab et « une nouvelle ligne » et vbTab et « trop »

        Faible m_printer comme nouvel iHandlePrinting

        m_printer.PrinterFont = nouvelle police (« courier nouveau », 9, FontStyle.Bold)

        'Code R d'envie CONTRE

        m_printer.DefaultPageSettings.Margins.Left = 10
        m_printer.DefaultPageSettings.Margins.Top = 10
        m_printer.DefaultPageSettings.Margins.Bottom = 50

        'Placer la propriété de TextToPrint  
        m_printer.TextToPrint = ~~~ de "" et de vbCrLf et                    de strToPrint 'en votre code, enlèvent cette ligne
        ''' m_printer.TextToPrint = "" et vbCrLf et ~~~ et uncomment de Me.txt SelectedRecord.Text 'cette ligne.

        'Placer les arrêts de tabulatrice required.  Noter que ~~~ de chaque spécifications d'étiquette le 'ajoutent des lignes semblables à.
        'est l'excentrage ~~~ de tableau                          précédente 'ceci avant d'appeler
        Faibles sngaTabStops comme simples () = {100.0F, 150.0F, 300.0F}         '~~~ la méthode d'impression.
        m_printer.TabStops = ~~~                               de sngaTabStops '

        'Courir la commande print  
        m_printer. Copie ()

    Sous-marin d'extrémité
Classe d'extrémité

Importations System.Drawing
Importations System.Drawing.Printing

Classe publique iHandlePrinting : Hérite de Printing.PrintDocument

#Region « variables de propriété »
    '''  
    Variable de propriété de ''' pour la police que l'utilisateur souhaite employer
    '''  
    '''  
    _font privé comme police

    '''  
    La variable de propriété de ''' pour le texte à soit imprimée
    '''  
    '''  
    _text privé comme corde

    Les _tabStops privés en tant que simple () = {0.0F}       '~~~ ajoutent cette rangée.

Région de #End

#Region « propriétés de classe »

    Les tabulations de propriété publique () en tant que () '  ~~~ simple ajoutent cette propriété.
        Obtenir                                 le '~~~
            ~~~ renvoyer                _tabStops '
        L'extrémité obtiennent                             le '~~~
        Ensemble (valeur de ByVal comme simple ())        '~~~
            _tabStops = ~~~               de valeur '
        '~~~                             réglé par extrémité
    ~~~ de propriété                            d'extrémité '

    '''  
    Propriété de ''' pour stocker le texte qui doit être imprimé
    '''  
    '''  
    Corde du ''' A
    '''  
    Propriété publique TextToPrint () comme corde
        Obtenir
            Renvoyer le _text
        L'extrémité obtiennent
        Placer (valeur de ByVal comme corde)
            _text = valeur
        Ensemble d'extrémité
    Propriété d'extrémité

    La fonction publique ShowPrintDialog () en tant que '    type booléen de ~~~* devrait être déclarée !
        ShowPrintDialog (je)
        De retour rectifier
    Finir la fonction

    La fonction privée ShowPrintDialog (myDocumentToPrint de ByRef comme PrintDocument) en tant que '    type booléen de ~~~* devrait être déclarée !
        Faible psd en tant que nouveau PageSetupDialog

        Avec le psd
            .AllowMargins = rectifient
            .AllowOrientation = rectifient
            .AllowPaper = rectifient
            .AllowPrinter = rectifient
            .ShowHelp = rectifient
            .ShowNetwork = rectifient

            . Document = myDocumentToPrint
        Extrémité avec
        psd.ShowDialog ()
        De retour rectifier
    Finir la fonction

    '''  
    Propriété de ''' pour tenir la police que les utilisateurs souhaite employer
    '''  
    '''  
    '''  
    '''  
    Propriété publique PrinterFont () comme police
        'Permet à l'utilisateur de dépasser la police de défaut
        Obtenir
            Renvoyer le _font
        L'extrémité obtiennent
        Placer (valeur de ByVal comme police)
            _font = valeur
        Ensemble d'extrémité
    Propriété d'extrémité
Région de #End

#Region « constructeurs de classe »
    '''  
    Constructeur vide de '''
    '''  
    '''  
    Nouveaux secondaires publics ()
        'Placer le jet de dossier
        MyBase.New ()
        'Instancier dehors la propriété des textes à une corde vide
        _text = String.Empty
    Sous-marin d'extrémité

    '''  
    Constructeur de ''' pour initialiser notre objet d'impression
    ''' et le texte qu'il a supposé pour être impression
    '''  
    Texte de ''' qui sera imprimé
    '''  
    Nouveau secondaire public (streptocoque de ByVal comme corde)
        'Placer le jet de dossier
        MyBase.New ()
        'Placer nos valeurs d'une propriété des textes
        _text = streptocoque
    Sous-marin d'extrémité
Région de #End

#Region « OnBeginPrint »
    '''  
    Dépassement de ''' la méthode d'OnBeginPrint de défaut d'objet de PrintDocument
    '''  
    '''  
    '''  
    Protégé dépasse OnBeginPrint secondaire (ByVal e comme Printing.PrintEventArgs)
        'Courir le code bas
        MyBase.OnBeginPrint (e)

        'Vérifier pour voir si l'utilisateur fournissait une police
        's'ils ne faisaient pas puis nous nous transférons sur Times New Roman
        Si le _font n'est rien alors
            'Créer la police que nous avons besoin
            _font = nouvelle police (« Times New Roman », 10)
        Finir si
    Finir le sous-marin
Région de #End

#Region « OnPrintPage »
    '''  
    Dépassement de ''' la méthode d'OnPrintPage de défaut de PrintDocument
    '''  
    '''  
    Le ''' ceci fournit la logique d'impression pour notre document
    Protégé dépasse OnPrintPage secondaire (ByVal e comme Printing.PrintPageEventArgs)
        'Courir le code bas
        MyBase.OnPrintPage (e)

        'Déclarer les variables locales requises
        curChar statique comme nombre entier
        Faible printHeight comme nombre entier
        Faible printWidth comme nombre entier
        Faible leftMargin comme nombre entier
        Faible rightMargin comme nombre entier
        Faibles lignes comme Int32
        Obscurcir les chars comme Int32

        'Placer la taille et les marges de secteur d'impression
        Avec MyBase.DefaultPageSettings
            printHeight = .PaperSize.Height -. Margins.Top -. Margins.Bottom
            printWidth = .PaperSize.Width -. Margins.Left -. Margins.Right
            leftMargin =. Margins.Left 'X
            rightMargin =. Margins.Top   'Y
        Extrémité avec

        'Vérifier si l'utilisateur choisi imprimer dans l'en largeur
        's'ils faisaient alors nous devons permuter des paramètres de taille/largeur
        Si MyBase.DefaultPageSettings.Landscape alors
            Faible tmp comme nombre entier
            tmp = printHeight
            printHeight = printWidth
            printWidth = tmp
        Finir si

        'Maintenant nous devons déterminer tout le nombre de lignes
        'nous allons être impression
        Faibles numLines en tant qu'Int32 = CInt (printHeight/PrinterFont.Height)

        'Créer une impression de rectangle sont pour notre document
        Obscurcir le printArea en tant que nouveau RectangleF (leftMargin, rightMargin, printWidth, printHeight)

        'Employer la classe de StringFormat pour la disposition des textes de notre document
        Obscurcir le format en tant que nouveau StringFormat (StringFormatFlags.LineLimit)
        ~~~ de format.SetTabStops (0.0F, _tabStops                ) le 'ajoutent cette ligne.

        'Adapter autant de caractères comme nous pouvons dans le secteur d'impression      

        e.Graphics.MeasureString (_text. Sous-chaîne (RemoveZeros (curChar)), PrinterFont, nouveau SizeF (printWidth, printHeight), format, chars, lignes)

        'Imprimer la page
        e.Graphics.DrawString (_text. Sous-chaîne (RemoveZeros (curChar)), PrinterFont, Brushes.Black, printArea, format)

        'Augmenter le compte courant de char
        chars curChar de +=

        'Detemine s'il y a plus de texte à imprimer, si
        'il y a le dire que l'imprimeur là est plus venant
        Si curChar  <>
    Fonction de ''' pour remplacer tous zéros dedans la taille à un 1
    Le ''' zéro salira vers le haut le secteur d'impression
    '''  
    Valeur de ''' à vérifier
    '''  
    '''  
    Fonction publique RemoveZeros (valeur de ByVal comme nombre entier) comme nombre entier
        'Vérifier la valeur passée dans la fonction,
        'si la valeur est un 0 (zéro) puis renvoyer un 1,
        'autrement retour que la valeur a passé dedans
        Choisir la valeur de cas
            Affaire 0
                Retour 1
            Cas autrement
                Valeur de retour
        Extrémité choisie
    Fonction de fin
Région de #End

Classe d'extrémité
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us