Frage : Druckenvorsprünge in VB.NET

Using System.Drawing.Printing schicke ich Inhalt einer area per informazioni zum Drucker.  Jedoch verliere ich die Vorsprünge innerhalb der area per informazioni.  Kann jemand mich mit irgendeiner Methode versehen, die die Vorsprünge erlaubt?  Z.Z. erhalten sie vor printing.

Thanks.
gegessen

Antwort : Druckenvorsprünge in VB.NET

Hallo, hbash,

Ja ist das, was ich hoffte, zu sehen.   Die Zusätze, die Sie fordern, sind verhältnismäßig wenige.

Um zu demonstrieren was Sie tun müssen, verursachte ich eine einfache Form mit einem Knopf und hinzufügte Ihre iHandlePrinting Kategorie ihr.  Der Code hinter dem Knopf ist im Wesentlichen der selbe wie Ihre PrintDocument () Subroutine und gezeigt im Folgenden Stückchen.  Ich gezeigt auch die geänderte Version der iHandlePrinting Kategorie.  Um sie einfach zu bilden die betroffenen Linien zu finden, markiert ich sie mit einer Anmerkung die mit den Buchstaben „~~~“ beginnt.

Sie sehen in meinen Beispielcode für den Formknopf, dass ich eine fest verdrahtete Schnur für Ihr TextBox.Text Eigentum ersetzt.  Für Ihren Code die Linien mit der fest verdrahteten Schnur und dem uncomment einfach entfernen die ursprüngliche Linie.  

Ich geändert auch zwei Linien in der iHandlePrinting Kategorie, die nicht auf Tabulationen beziehen.  Ich markiert diese mit den Anmerkungen, die mit den Buchstaben „~~~*“ anfangen.  Ich empfehle in hohem Grade, dass Sie „die Wahl verwenden, die“ ausdrücklich sind und „die strenge Wahl“ in den ganzen Ihre Kodierung.  Die kleine Extrabemühung, die sie erfordert, speichert Sie von vielen geheimnisvollen Kodierungproblemen und -kopfschmerzen.

Oh und gerade als seitliche Anmerkung, verwenden die vielen (möglicherweise meisten) Kodierer eine Benennungversammlung, in der der erste Buchstabe des Namens Ihrer iHandlePrinting Kategorie vorschlagen konnte, dass dieses eine Schnittstelle eher als eine Kategorie ist.  (Zugegebenermaßen, Versalien „ich“ verwendet häufiger als die Kleinschreibung.)

Beifall,
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:
6:
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:
Allgemeine Kategorie Form1

    Privates Unterseeboot Button1_Click (ByVal Absender als System.Object, ByVal e als System.EventArgs) behandelt Button1.Click

        Schwaches strToPrint als Schnur = „ist hier“ u. vbTab u. „Schnur mit einigem“ u. vbTab u. _
                                   „einbettete Tabulationen“ u. vbTab u. „und“ u. vbCrLf u. _ Lf
                                   vbTab u. vbTab u. „eine neue Linie“ u. vbTab u. „auch“

        Schwaches m_printer, wie das neue iHandlePrinting

        m_printer.PrinterFont = neuer Guss („Eilbote neu“, 9, FontStyle.Bold)

        'Neid-Code R GEGEN

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

        'TextToPrint Eigentum einstellen  
        m_printer.TextToPrint = "" u. vbCrLf u. strToPrint                    '~~~ in Ihrem Code, entfernen diese Linie
        ''' m_printer.TextToPrint = "" u. vbCrLf u. Me.txt SelectedRecord.Text '~~~ und uncomment diese Linie.

        'Die erforderlichen Tabulationen einstellen.  Merken, dass jede Vorsprungspezifikation '~~~ die Linien addieren, die ähnlich sind.
        'ist der Versatz vom vorhergehenden Tab                          '~~~ dieses vor dem Hervorrufen
        Schwache sngaTabStops, wie einzeln () = {100.0F, 150.0F, 300.0F}         '~~~ die Druckmethode.
        m_printer.TabStops = sngaTabStops                               '~~~

        'Druckbefehl laufen lassen  
        m_printer. Druck ()

    Enden-Unterseeboot
Enden-Kategorie

Importe System.Drawing
Importe System.Drawing.Printing

Allgemeine iHandlePrinting Kategorie: Übernimmt Printing.PrintDocument

#Region „Eigentum-Variablen“
    '''  
    ''' Eigentumvariable für den Guss, den der Benutzer benutzen möchte
    '''  
    '''  
    Privates _font als Guss

    '''  
    ''' Eigentumvariable für den Drucktext
    '''  
    '''  
    Privates _text als Schnur

    Private _tabStops als einzelnes () = {0.0F}       '~~~ addieren diese Reihe.

#End Region

#Region „Kategorien-Eigenschaften“

    Staatseigentum-Tabulationen () als einzelnes ()  '~~~ addieren dieses Eigentum.
        '                                 ~~~ erhalten
            _tabStops zurückbringen                '~~~
        Ende erhalten                             '~~~
        Satz (ByVal Wert, wie einzeln ())        '~~~
            _tabStops = Wert               '~~~
        Ende eingestelltes                             '~~~
    Enden-Eigentum                            '~~~

    '''  
    ''' Eigentum, zum des Textes zu halten, der gedruckt werden soll
    '''  
    '''  
    ''' A Schnur
    '''  
    Staatseigentum TextToPrint () als Schnur
        Erhalten
            _text zurückbringen
        Ende erhalten
        Einstellen (ByVal Wert als Schnur)
            _text = Wert
        Enden-Satz
    Enden-Eigentum

    Allgemeine Funktion ShowPrintDialog () als Boolesche    '~~~* Art sollte erklärt werden!
        ShowPrintDialog (ich)
        Rückhol ausrichten
    Funktion beenden

    Private Funktion ShowPrintDialog (ByRef myDocumentToPrint als PrintDocument) als Boolesche    '~~~* Art sollte erklärt werden!
        Schwaches psd als neues PageSetupDialog

        Mit psd
            .AllowMargins = ausrichten en
            .AllowOrientation = ausrichten en
            .AllowPaper = ausrichten en
            .AllowPrinter = ausrichten en
            .ShowHelp = ausrichten en
            .ShowNetwork = ausrichten en

            . Dokument = myDocumentToPrint
        Ende mit
        psd.ShowDialog ()
        Rückhol ausrichten
    Funktion beenden

    '''  
    ''' Eigentum, zum des Gusses zu halten, den die Benutzer benutzen möchte
    '''  
    '''  
    '''  
    '''  
    Staatseigentum PrinterFont () als Guss
        'Erlaubt dem Benutzer, den Rückstellungsguß aufzuheben
        Erhalten
            _font zurückbringen
        Ende erhalten
        Einstellen (ByVal Wert als Guss)
            _font = Wert
        Enden-Satz
    Enden-Eigentum
#End Region

#Region „Kategorien-Erbauer“
    '''  
    ''' Leerer Erbauer
    '''  
    '''  
    Allgemeine Vorneue ()
        'Den Aktenstrom einstellen
        MyBase.New ()
        'Instantiate heraus Texteigentum zu einer leeren Schnur
        _text = String.Empty
    Enden-Unterseeboot

    '''  
    ''' Erbauer, zum unseres Druckengegenstandes zu initialisieren
    ''' und der Text, die er angenommen, um Drucken zu sein
    '''  
    ''' Text, der gedruckt
    '''  
    Allgemeines Vorneues (ByVal str als Schnur)
        'Den Aktenstrom einstellen
        MyBase.New ()
        'Unseren Text-Vermögenswert einstellen
        _text = str
    Enden-Unterseeboot
#End Region

#Region „OnBeginPrint“
    '''  
    ''' Übersteuerung die Rückstellung OnBeginPrint Methode des PrintDocument Gegenstandes
    '''  
    '''  
    '''  
    Geschützt aufhebt VorOnBeginPrint  (ByVal e als Printing.PrintEventArgs)
        'Niedrigen Code laufen lassen
        MyBase.OnBeginPrint (e)

        'Überprüfen, um zu sehen, wenn der Benutzer einen Guss zur Verfügung stellte
        'wenn sie nicht dann taten, führen wir zu Times New Roman
        Wenn _font nichts dann ist
            'Den Guss herstellen, den wir benötigen
            _font = neuer Guss („Times New Roman“, 10)
        Beenden wenn
    Unterseeboot beenden
#End Region

#Region „OnPrintPage“
    '''  
    ''' Übersteuerung die Rückstellung OnPrintPage Methode des PrintDocument
    '''  
    '''  
    ''' Dieses zur Verfügung stellt die Drucklogik für unser Dokument
    Geschützt aufhebt VorOnPrintPage  (ByVal e als Printing.PrintPageEventArgs)
        'Niedrigen Code laufen lassen
        MyBase.OnPrintPage (e)

        'Die lokalen benötigten Variablen erklären
        Statisches curChar als ganze Zahl
        Schwaches printHeight als ganze Zahl
        Schwaches printWidth als ganze Zahl
        Schwaches leftMargin als ganze Zahl
        Schwaches rightMargin als ganze Zahl
        Schwache Linien als Int32
        Putzfrauen als Int32 verdunkeln

        'Druckfeldgröße und -seitenränder einstellen
        Mit MyBase.DefaultPageSettings
            printHeight = .PaperSize.Height -. Margins.Top -. Margins.Bottom
            printWidth = .PaperSize.Width -. Margins.Left -. Margins.Right
            leftMargin =. Margins.Left 'X
            rightMargin =. Margins.Top   'Y
        Ende mit

        'Überprüfen ob der Benutzer, der vorgewählt, im Landschaftsmodus zu drucken
        'wenn sie dann taten, müssen wir Höhen-/Breitenparameter austauschen
        Wenn MyBase.DefaultPageSettings.Landscape dann
            Schwaches tmp als ganze Zahl
            tmp = printHeight
            printHeight = printWidth
            printWidth = tmp
        Beenden wenn

        'Jetzt müssen wir die Gesamtzeilenzahl feststellen
        'wir werden Drucken sein
        Schwache numLines als Int32 = CInt (printHeight/PrinterFont.Height)

        'Ein Vierecksdrucken verursachen sind für unser Dokument
        printArea als neues RectangleF (leftMargin, rightMargin, printWidth, printHeight) verdunkeln

        'Die StringFormat Kategorie für den Textplan unseres Dokuments benutzen
        Format als neues StringFormat (StringFormatFlags.LineLimit) verdunkeln
        format.SetTabStops (0.0F, _tabStops)                '~~~ addieren diese Linie.

        'So viele Buchstaben passen, wir in das Druckfeld können      

        e.Graphics.MeasureString (_text. Teilkette (RemoveZeros (curChar)), PrinterFont, neues SizeF (printWidth, printHeight), Format, Putzfrauen, Linien)

        'Die Seite drucken
        e.Graphics.DrawString (_text. Teilkette (RemoveZeros (curChar)), PrinterFont, Brushes.Black, printArea, Format)

        'Gegenwärtigen Putzfrauzählimpuls erhöhen
        curChar += Putzfrauen

        'Detemine, wenn es mehr Text gibt, zum zu drucken, wenn
        'es gibt erklären, das der Drucker dort kommend ist
        Wenn curChar  <>
    ''' Funktion, zum irgendwelcher null die Größe bis 1 innen zu ersetzen
    ''' Null verwirrt oben die Druckzone
    '''  
    ''' Wert zum zu überprüfen
    '''  
    '''  
    Allgemeine Funktion RemoveZeros (ByVal Wert als ganze Zahl) als ganze Zahl
        'Den Wert überprüfen, der in die Funktion geführt,
        'wenn der Wert 0 (null) dann ist, 1 zurückbringen,
        'anders Rückkehr, die der Wert innen führte
        Fallwert vorwählen
            Rechtssache 0
                Rückkehr 1
            Fall sonst
                Rückholwert
        Ende auserwählt
    Enden-Funktion
#End Region

Enden-Kategorie
Weitere Lösungen  
 
programming4us programming4us