Fråga : Utskrift av flikar i VB.NET

Using System.Drawing.Printing I förmiddagen som överför en textbox, tillfredsställer till skrivaren.  Emellertid I-förmiddag som förlorar flikarna inom textboxen.  Kan någon ge mig med någon metod som ska låter flikarna?  För närvarande de får åt för printing.

Thanks.
" klar "

Svar : Utskrift av flikar i VB.NET

Hälsningar hbash,

Ja det är vad jag hoppas för att se.   Tilläggen, som du kräver, är förhållandevis få.

Att visa vad du behöver att göra, jag skapade ett enkelt bildar med en knäppas och tillfogade din iHandlePrinting klassificerar till den.  Kodifiera bak knäppas är i grunden samma som din PrintDocument () subroutine och visas i efter snippeten.  Jag har också visat att den ändrade versionen av iHandlePrintingen klassificerar.  Att göra den lätt att finna det upprört fodrar, mig har markerat dem med en kommentar som startar med teckenen ”~~~”.

Du ska ser i mitt tar prov kodifierar för bilda knäppas att jag har ersatt ett hårt kodat stränger för din TextBox.Text-egenskap.  För ditt kodifiera, ta precis bort fodrar med det hardcoded stränger, och uncommenten som original fodrar.  

Jag har också ändrat två fodrar i iHandlePrintingen klassificerar som inte förbinder till flikstopp.  Jag har markerat dessa med kommentarbörjan med teckenen ”~~~*”.  Jag rekommenderar högt att du använder både ”explicit alternativ” och ”alternativ som är strikt” sammanlagt av ditt kodifiera.  Det små extra försöket den kräver ska räddning dig från problem och huvudvärkar för en radda mystiska kodifiera.

Oh, och som precis en sida noterar, många (kanske mest) coders använder en namnge regel var första märker av det känt av din iHandlePrinting klassificerar styrka föreslår att denna är en ha kontakt ganska än en klassificera.  (Admittedly, bokstav ”jag” används vanligare än lowercasen.),

Jubel,
Kåt
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:
Allmänhet klassificerar Form1

    Den privata suben Button1_Click (den ByVal avsändaren som System.Object, ByVal e som System.EventArgs) behandlar Button1.Click

        Dunkel strToPrint som stränger = ”är här”, & vbTab & ”stränger med något” & vbTab & _,
                                   ”bäddade in flikstopp” & vbTab & ”och” & vbCrLf & _,
                                   vbTab & vbTab & ”en ny rad” & vbTab & ”för”,

        Dunkel m_printer som ny iHandlePrinting

        m_printer.PrinterFont = ny stilsort (”ny kurir”, 9, FontStyle.Bold)

        'Avund kodifierar R VS

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

        'Fastställd TextToPrint egenskap  
        m_printer.TextToPrint = ""- & vbCrLf- & strToPrint                    '~~~ i ditt kodifierar, tar bort denna fodrar
        ''' m_printer.TextToPrint = "" & vbCrLf & Me.txt SelectedRecord.Text '~~~ och uncomment som detta fodrar.

        'Uppsättning de required flikstoppen.  Notera att ~~~ för varje flikspecifikation 'tillfogar fodrar liknande till.
        'är offseten från den föregående fliken.                          '~~~ detta före att åkalla
        Dunkla sngaTabStops som singel () = {100.0F, 150.0F, 300.0F}         '~~~ tryckmetoden.
        m_printer.TabStops = sngaTabStops                               '~~~

        'Körningstrycket befaller  
        m_printer. Tryck ()

    Avsluta suben
Avsluta klassificerar

Importer System.Drawing
Importer System.Drawing.Printing

Allmänhet klassificerar iHandlePrinting: Övertar Printing.PrintDocument

#Region ”egenskapsvariabler”,
    ''',  
    ''' Egenskapsvariabel för stilsorten som användaren önskar att använda
    ''',  
    ''',  
    Privat _font som stilsort

    ''',  
    ''' Egenskapsvariabeln för texten till skrivs ut
    ''',  
    ''',  
    Privat _text som stränger

    Privata _tabStops som singel () = {0.0F}       '~~~ tillfogar denna samling.

#Endregion

#Regionen ”klassificerar rekvisita”,

    Offentliga egenskapsTabStops () ~~~ som för singeln (  ) 'tillfogar denna egenskap.
        Få                                 '~~~
            Gå _tabStops tillbaka                '~~~
        Avsluta får                             '~~~
        Uppsättning (ByVal värderar som singel ())        '~~~
            _tabStops = värderar               '~~~
        Avsluta fastställd                             '~~~
    Avsluta egenskaps                            '~~~

    ''',  
    ''' Egenskap som rymmer texten som ska skrivas ut
    ''',  
    ''',  
    ''' A stränger
    ''',  
    Offentlig egenskap TextToPrint () som stränger
        Få
            Gå _text tillbaka
        Avsluta får
        Uppsättning (ByVal värderar som stränger),
            _text = värderar
        Avsluta uppsättningen
    Avsluta egenskapen

    Allmänhet fungerar ShowPrintDialog () som Boolean    '~~~*typ bör förklaras!
        ShowPrintDialog (jag)
        Återgångt True
    Avsluta fungerar

    Privat fungera ShowPrintDialog (ByRef myDocumentToPrint som PrintDocument) som Boolean    '~~~*typ bör förklaras!
        Dunkel psd som nya PageSetupDialog

        Med psd
            .AllowMargins = True
            .AllowOrientation = True
            .AllowPaper = True
            .AllowPrinter = True
            .ShowHelp = True
            .ShowNetwork = True

            . Dokument = myDocumentToPrint
        Avsluta med
        psd.ShowDialog ()
        Gå riktigt tillbaka
    Avsluta fungerar

    ''',  
    ''' Egenskap som rymmer stilsorten som användarena önskar att använda
    ''',  
    ''',  
    ''',  
    ''',  
    Offentlig egenskap PrinterFont () som stilsort
        'Låter användaren till åsidosättande standardstilsorten
        Få
            Gå _font tillbaka
        Avsluta får
        Uppsättning (ByVal värderar som stilsort),
            _font = värderar
        Avsluta uppsättningen
    Avsluta egenskapen
#Endregion

#Regionen ”klassificerar Constructors”,
    ''',  
    Tom constructor för '''
    ''',  
    ''',  
    Offentliga undernya ()
        'Uppsättning som spara strömmer
        MyBase.New ()
        'Exemplifiera textegenskapen till ett tomt stränger ut
        _text = String.Empty
    Avsluta suben

    ''',  
    ''' Constructoren som initialiserar vår printing, anmärker
    ''' och texten den har förment som är printing
    ''',  
    ''' Text, som ska, skrivs ut
    ''',  
    Offentligt undernytt (den ByVal stren som stränger)
        'Uppsättning som spara strömmer
        MyBase.New ()
        'Uppsättning som vår textegenskap värderar
        _text = str
    Avsluta suben
#Endregion

#Region ”OnBeginPrint”,
    ''',  
    ''' Åsidosättande som den standardOnBeginPrint metoden av PrintDocumenten anmärker
    ''',  
    ''',  
    ''',  
    Skyddade åsidosättanden underOnBeginPrint (ByVal e som Printing.PrintEventArgs)
        'Körningen baserar kodifierar
        MyBase.OnBeginPrint (e)

        'Kontrollera för att se, om användaren g en stilsort
        'om de inte gjorde därefter, vi standardinställer till Times New Roman
        Om _font är ingenting därefter
            'Skapa stilsorten som vi behöver
            _font = ny stilsort (”Times New Roman”, 10)
        Avsluta om
    Avsluta suben
#Endregion

#Region ”OnPrintPage”,
    ''',  
    ''' Åsidosättande den standardOnPrintPage metoden av PrintDocumenten
    ''',  
    ''',  
    ''' Detta ger trycklogiken för vårt dokument
    Skyddade åsidosättanden underOnPrintPage (ByVal e som Printing.PrintPageEventArgs)
        'Körningen baserar kodifierar
        MyBase.OnPrintPage (e)

        'Förklara behövda lokalvariabler
        Statisk elektricitet som är curChar som heltal
        Dunkel printHeight som heltal
        Dunkel printWidth som heltal
        Dunkel leftMargin som heltal
        Dunkel rightMargin som heltal
        Dunkelt fodrar som Int32
        Dunkla rödingar som Int32

        'Fastställdt tryckområde storleksanpassar och förser med marginal
        Med MyBase.DefaultPageSettings
            printHeight = .PaperSize.Height -. Margins.Top -. Margins.Bottom
            printWidth = .PaperSize.Width -. Margins.Left -. Margins.Right
            leftMargin =. Margins.Left 'X
            rightMargin =. Margins.Top   'Y
        Avsluta med

        'Kontrollera, om den utvalda användaren att skriva ut in landskap funktionsläge
        'om de gjorde därefter, vi behöver att byta höjd-/breddparametrar
        Om MyBase.DefaultPageSettings.Landscape därefter
            Dunkel tmp som heltal
            tmp = printHeight
            printHeight = printWidth
            printWidth = tmp
        Avsluta om

        'Nu vi behöver att bestämma slutsumman numrerar av fodrar
        'vi går att vara printing
        Dunkla numLines som Int32 = CInt (printHeight/PrinterFont.Height)

        'Skapa en rektangelprinting är för vårt dokument
        Dunkel printArea som nya RectangleF (leftMargin, rightMargin, printWidth, printHeight)

        'Använd StringFormaten klassificerar för textorienteringen av vårt dokument
        Dunkelt formatera som nya StringFormat (StringFormatFlags.LineLimit)
        ~~~ för format.SetTabStops (0.0F, _tabStops                ) 'tillfogar denna fodrar.

        'Passform så många tecken, som vi kan in i tryckområdet      

        e.Graphics.MeasureString (_text. Substring ((curChar) RemoveZeros), PrinterFont, nya SizeF (printWidth, printHeight), formaterar, bränner till kol, fodrar),

        'Skriv ut sidan
        e.Graphics.DrawString (_text. Substring ((curChar) RemoveZeros), PrinterFont, Brushes.Black, printArea, formaterar),

        'Räkning för förhöjningströmröding
        curChar +=-rödingar

        'Detemine, om det finns mer text som ska skrivas ut, om
        'det finns berättaen som skrivaren där är mer kommande
        Om curChar  <>
    ''' Fungerar för att byta ut några nollor in storleksanpassa till en 1
    Ska ''' nolla rörar upp printingområdet
    ''',  
    ''' Värderar för att kontrollera
    ''',  
    ''',  
    Allmänhet fungerar RemoveZeros (ByVal värderar som heltal), som heltal
        'Kontrollera värdera som passeras in i fungera,
        gå en 1 tillbaka, 'om värdera är en 0 (nolla) därefter,
        'annars retur som värdera passerade in
        Det valda fallet värderar
            Fall 0
                Retur 1
            Fall annars
                Gå tillbaka värderar
        Avsluta valt
    Avsluta fungerar
#Endregion

Avsluta klassificerar
Andra lösningar  
 
programming4us programming4us