Vraag : De lusjes van de druk in VB.NET

Het gebruiken van System.Drawing.Printing ik een textbox verzend stelt aan de printer tevreden.  Nochtans, verlies ik de lusjes binnen textbox.  Kan iedereen me van één of andere voorzien methode die de lusjes zal toestaan?  Momenteel worden zij gegeten vóór printing.

Thanks.

Antwoord : De lusjes van de druk in VB.NET

Hello, hbash,

Ja, is dat wat ik hoopte om te zien.   De toevoegingen die u vereist zijn relatively few.

Om aan te tonen wat u moet doen, cre�ërde ik een eenvoudige vorm met één Knoop en voegde uw iHandlePrinting klasse aan het toe.  De code achter de knoop is hoofdzakelijk het zelfde als uw () subroutine PrintDocument en in het volgende fragment getoond.  Ik heb ook de gewijzigde versie van de iHandlePrinting klasse getoond.  Om het gemakkelijk te maken om de beïnvloede lijnen te vinden, heb ik hen met een commentaar gemerkt die met de karakters „~~~“ begint.

U zult in mijn steekproefcode voor de vormknoop zien dat ik een hard gecodeerd koord voor uw bezit TextBox.Text heb gesubstitueerd.  Voor uw code, verwijder enkel de lijnen met hardcoded koord en uncomment de originele lijn.  

Ik heb ook twee lijnen in de iHandlePrinting klasse veranderd die niet op lusjeeinden betrekking hebben.  Ik heb deze met commentaren gemerkt die met de karakters „~~~*“ beginnen.  Ik adviseer hoogst dat u zowel „Expliciete Optie“ als „Optie Strikt“ in elk van uw codage gebruikt.  De kleine extra inspanning die het zal redt u van heel wat geheimzinnige codageproblemen en hoofdpijnen heeft vereist.

Oh, en enkel als zijnota, de vele (misschien meeste) codeurs gebruikt een noemende overeenkomst waar de eerste brief van de naam van uw iHandlePrinting klasse zou kunnen voorstellen dat dit een interface eerder dan een klasse is.  (Algemeen bekend, worden de hoofdletters „I“ gebruikt vaker dan de kleine letters.)

Juicht toe,
Wellustig
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:
Openbare Klasse Form1

    Privé Sub (ByVal afzender als System.Object, ByVal e als System.EventArgs) Handvatten Button1_Click Button1.Click

        Schemerige strToPrint als Koord = „hier is“ & vbTab & „koord met wat“ & vbTab & _
                                   het „ingebedde lusje houdt“ & vbTab & „en“ & vbCrLf & _ op
                                   vbTab & vbTab & een „nieuwe lijn“ & vbTab & „ook“

        Schemerige m_printer als het Nieuwe iHandlePrinting

        m_printer.PrinterFont = Nieuwe Doopvont („Nieuwe Koerier“, 9, FontStyle.Bold)

        De 'code R van de afgunst VERSUS

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

        'Plaats bezit TextToPrint  
        m_printer.TextToPrint = verwijderen "" & vbCrLf &                    strToPrint '~~~ in uw code, deze lijn
        ''' m_printer.TextToPrint = "" & vbCrLf & Me.txt SelectedRecord.Text '~~~ en uncomment deze lijn.

        'Plaats de vereiste lusjeeinden.  Merk op dat elke lusjespecificatie '~~~ lijnen gelijkend op toevoegt.
        'is de compensatie van de vorige tabel                          '~~~ dit voorafgaand aan het aanhalen
        Schemerige sngaTabStops zoals Enig () = {100.0F, 150.0F, 300.0F}         '~~~ de methode van de Druk.
        m_printer.TabStops = sngaTabStops                               '~~~

        'Het bevel van de Druk van de looppas  
        m_printer. Druk ()

    Sub van het eind
De Klasse van het eind

De invoer System.Drawing
De invoer System.Drawing.Printing

Openbare Klasse die iHandlePrinting: Erft Printing.PrintDocument

#Region de „Variabelen van het Bezit“
    '''  
    ''' De variabele van het bezit voor de Doopvont de te gebruiken gebruikerswensen
    '''  
    '''  
    Privé _font als Doopvont

    '''  
    ''' De variabele van het bezit voor de te drukken tekst
    '''  
    '''  
    Privé _text als Koord

    Privé _tabStops als Enig () = {0.0F}       '~~~ voegen deze serie toe.

#End gebied

#Region de „Eigenschappen van de Klasse“

    De openbare Tabulaties van het Bezit () als Enige ()  '~~~ voegen dit bezit toe.
        Krijg                                 '~~~
            Keer _tabStops                '~~~ terug
        Het eind krijgt                             '~~~
        Reeks (waarde ByVal zoals Enig ())        '~~~
            _tabStops = waarde               '~~~
        De Reeks '                             ~~~ van het eind
    Het Bezit '                            ~~~ van het eind

    '''  
    ''' Bezit om de tekst te houden die moet worden gedrukt
    '''  
    '''  
    ''' Een koord
    '''  
    Openbaar Bezit TextToPrint () als Koord
        Krijg
            Keer _text terug
        Het eind krijgt
        Reeks (Waarde ByVal als Koord)
            _text = Waarde
        De Reeks van het eind
    Het Bezit van het eind

    De Overheidsfunctie ShowPrintDialog () zou als '    Type ~~~* Van Boole moeten worden verklaard!
        ShowPrintDialog (me)
        Ware terugkeer
    De Functie van het eind

    De privé Functie ShowPrintDialog (ByRef myDocumentToPrint als PrintDocument) zou als '    Type ~~~* Van Boole moeten worden verklaard!
        Schemerige psd als Nieuwe PageSetupDialog

        Met psd
            .AllowMargins = Waar
            .AllowOrientation = Waar
            .AllowPaper = Waar
            .AllowPrinter = Waar
            .ShowHelp = Waar
            .ShowNetwork = Waar

            . Document = myDocumentToPrint
        Eind met
        psd.ShowDialog ()
        Ware terugkeer
    De Functie van het eind

    '''  
    ''' Bezit om de doopvont te houden de te gebruiken gebruikerswensen
    '''  
    '''  
    '''  
    '''  
    Openbaar Bezit PrinterFont () als Doopvont
        'Staat de gebruiker toe om de standaarddoopvont met voeten te treden
        Krijg
            Keer _font terug
        Het eind krijgt
        Reeks (Waarde ByVal als Doopvont)
            _font = Waarde
        De Reeks van het eind
    Het Bezit van het eind
#End gebied

#Region de „Aannemers van de Klasse“
    '''  
    ''' Lege aannemer
    '''  
    '''  
    Openbare Sub Nieuw ()
        'Plaats de dossierstroom
        MyBase.New ()
        'Concretiseer uit het bezit van de Tekst aan een leeg koord
        _text = String.Empty
    Sub van het eind

    '''  
    ''' Aannemer om ons drukvoorwerp te initialiseren
    ''' en de tekst het heeft verondersteld te drukken
    '''  
    ''' Tekst die zal worden gedrukt
    '''  
    Openbare Sub Nieuw (streptokok ByVal als Koord)
        'Plaats de dossierstroom
        MyBase.New ()
        'Plaats onze het bezitswaarde van de Tekst
        _text = streptokok
    Sub van het eind
#End gebied

#Region „OnBeginPrint“
    '''  
    ''' Treed de methode standaard van OnBeginPrint van het Voorwerp PrintDocument met voeten
    '''  
    '''  
    '''  
    Beschermd treedt SubOnBeginPrint (ByVal e als Printing.PrintEventArgs) met voeten
        'De basiscode van de looppas
        MyBase.OnBeginPrint (e)

        'Controle om te zien of verstrekte de gebruiker een doopvont
        'als zij niet toen blijven wij aan Tijden Nieuwe Romein in gebreke
        Als _font dan niets is
            'Cre�ër de doopvont die wij hebben gewenst
            _font = Nieuwe Doopvont („Tijden Nieuwe Romein“, 10)
        Eind als
    Sub van het eind
#End gebied

#Region „OnPrintPage“
    '''  
    ''' Treed de methode standaard van OnPrintPage van PrintDocument met voeten
    '''  
    '''  
    ''' Dit verstrekt de druklogica voor ons document
    Beschermd treedt SubOnPrintPage (ByVal e als Printing.PrintPageEventArgs) met voeten
        'De basiscode van de looppas
        MyBase.OnPrintPage (e)

        'Verklaar lokale variabelen nodig
        Statische curChar als Geheel
        Schemerige printHeight als Geheel
        Schemerige printWidth als Geheel
        Schemerige leftMargin als Geheel
        Schemerige rightMargin als Geheel
        Schemerige lijnen als Int32
        Schemerige klusjes als Int32

        'Plaats de grootte en de marges van het drukgebied
        Met MyBase.DefaultPageSettings
            printHeight = .PaperSize.Height -. Margins.Top -. Margins.Bottom
            printWidth = .PaperSize.Width -. Margins.Left -. Margins.Right
            leftMargin =. Margins.Left 'X
            rightMargin =. Margins.Top   'Y
        Eind met

        'Controle als de gebruiker om op de wijze van het Landschap selecteerde te drukken
        'als zij toen moeten wij hoogte/breedte parameters ruilen
        Als MyBase.DefaultPageSettings.Landscape toen
            Schemerige tmp als Geheel
            tmp = printHeight
            printHeight = printWidth
            printWidth = tmp
        Eind als

        'Nu moeten wij het totale aantal lijnen bepalen
        'wij gaan drukken
        Schemerige numLines als Int32 = CInt (printHeight/PrinterFont.Height)

        'Cre�ër een rechthoekdruk zijn voor ons document
        Verduister printArea als Nieuwe RectangleF (leftMargin, rightMargin, printWidth, printHeight)

        'Gebruik de klasse StringFormat voor de tekstlay-out van ons document
        Schemerig formaat als Nieuwe StringFormat (StringFormatFlags.LineLimit)
        format.SetTabStops (0.0F, _tabStops)                '~~~ voegt deze lijn toe.

        'Pasvorm zo vele karakters aangezien wij in het drukgebied kunnen      

        e.Graphics.MeasureString (_text. Substring ((curChar) RemoveZeros), PrinterFont, Nieuwe SizeF (printWidth, printHeight), formaat, klusjes, lijnen)

        'Druk de pagina
        e.Graphics.DrawString (_text. Substring ((curChar) RemoveZeros), PrinterFont, Brushes.Black, printArea, formaat)

        'Huidige het klusjestelling van de verhoging
        curChar += klusjes

        'Detemine als er meer te drukken tekst is, als
        'er zijn vertelt de printer er komend zijn
        Als curChar  <>
    ''' Functie om om het even welke nul in de grootte aan a1 te vervangen
    ''' Nul omhoog het drukgebied zal knoeien
    '''  
    ''' Te controleren waarde
    '''  
    '''  
    Overheidsfunctie RemoveZeros (waarde ByVal als Geheel) als Geheel
        'Controle de waarde in de functie wordt overgegaan die,
        'als de waarde is keren 0 (nul) dan a1 terug,
        'keer anders de binnen overgegaane waarde terug
        Selecteer de waarde van het Geval
            Geval 0
                Terugkeer 1
            Geval anders
                De waarde van de terugkeer
        Uitgezocht eind
    De Functie van het eind
#End gebied

De Klasse van het eind
Andere oplossingen  
 
programming4us programming4us