Benutzer mit den meisten Antworten
Verzweifelter Versuch, eine Druckausgabe zu realisieren...wer kann helfen??

Frage
-
Hallo,
ich habe vor ca. 10 Jahren eine grafische Sonder-Applikation in VB6 geschrieben und muss diese nun erneuern - in vb.net 2013.
Da ich mich noch sehr schwer tue, was den Umstieg von VB6 angeht, hoffe ich auf eine kurze und einfache Hilfestellung bei der Vervollständigung eines Druckbefehls. Ich blicke da wirklich nicht durch - auch nach stundenlangem Herumprobieren. <<schäm>>
Folgende Codezeilen habe ich aus einem Beispiel übernommen, um überhaupt annähernd zu verstehen, wie es funktionieren könnte:
Public WithEvents mDoc As New PrintDocument() Public mFont As New Font("Courier New", 12) Public Sub PictureBoxPreviewAndPrint_Click(sender As Object, e As EventArgs) Handles PictureBoxPreviewAndPrint.Click Call mDoc_PrintPage(Me, ) End Sub Public Sub mDoc_PrintPage(ByVal sender As Object, _ ByVal e As System.Drawing.Printing.PrintPageEventArgs) _ Handles mDoc.PrintPage Dim xPos As Single = e.MarginBounds.Left Dim yPos As Single = e.MarginBounds.Top Dim lineHeight As Single = mFont.GetHeight(e.Graphics) With e.Graphics .DrawString("This is a test", _ mFont, Brushes.Black, xPos, yPos) yPos += lineHeight .DrawString("This is another test", _ mFont, Brushes.Black, xPos, yPos) xPos += .MeasureString("This is another test", mFont).Width .DrawString("Here's some more text", _ mFont, Brushes.Black, xPos, yPos) xPos = e.MarginBounds.Left End With Dim psdlg As New PageSetupDialog() psdlg.Document = mDoc psdlg.ShowDialog() Dim prprvdlg As New PrintPreviewDialog() prprvdlg.Document = mDoc prprvdlg.WindowState = FormWindowState.Maximized prprvdlg.ShowDialog() Dim prdlg As New PrintDialog() prdlg.Document = mDoc If prdlg.ShowDialog = DialogResult.OK Then mDoc.Print() End If End Sub
Ich verstehe einfach nicht, welches Argument für 'ByVal e As System.Drawing.Printing.PrintPageEventArgs' ich beim Aufrufen des Subs mDoc.PrintPage angeben muss:
Call mDoc_PrintPage(Me, ????? )
Wenn mir das irgend jemand kurz begreiflich machen könnte, wäre ich seeeeehr dankbar!!
Antworten
-
Den PrintPage-Handler muss man nicht aufrufen. Es würde im Normalfall auch nicht viel bringen. Sobald du mDoc.Print() aufrufst, wird der PrintPage-Handler automatisch ausgeführt. Das wäre dann der letzte Schritt von 2.
Das Dokument (mDoc) enthält auch die eingestellten Druckerdaten usw. Darum brauchst du dich also auch nicht kümmern.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Samstag, 9. November 2013 21:13
- Als Antwort markiert Mib76 Samstag, 9. November 2013 21:19
Alle Antworten
-
Hallo,
das Drucken ist eigentlich garnicht so schwer ;)Die PrintPageEventArgs haben eine Eigenschaft Graphics. Das Graphics-Objekt kannst du bemalen. Beispielsweise mittels DrawString oder FillRectangle. Gucke einfach mal die Liste in IntelliSense oder hier durch.
Alles was du zeichnest wird anschließend mit ausgedruckt.Hier noch ein kleines Beispiel dazu:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'Normalerweise ein Button-Klick-Event o.ä. 'Alternativ mit dem PrintPreviewDialog machen PrintDialog1.Document = PrintDocument1 'Dokument zuweisen If PrintDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then 'Setup-Dialog anzeigen PrintDocument1.Print() 'Dokument drucken End If End Sub Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage 'Ausdruck zeichnen e.Graphics.DrawString("String", SystemFonts.CaptionFont, Brushes.AliceBlue, New PointF(50, 50)) End Sub
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke. -
Hi Koopakiller,
erst einmal vielen Dank für die turboschnelle Antwort!! Verstehen tu ich das aber leider immer noch nicht.
Kurze Erläuterung meinerseits, wie ich den Codeaufbau verstanden habe:
1.) Neues Drucker-Dokument erzeugen:
Public WithEvents mDoc As New PrintDocument()
2.) Sub zum Erzeugen aller Grafiken und Texte, die ausgedruckt werden sollen:
Public Sub mDoc_PrintPage(ByVal sender As Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs) _
Handles mDoc.PrintPage
Dim xPos As Single = e.MarginBounds.Left
Dim yPos As Single = e.MarginBounds.Top
Dim lineHeight As Single = mFont.GetHeight(e.Graphics)
With e.Graphics
.DrawString("This is a test", _
mFont, Brushes.Black, xPos, yPos)
yPos += lineHeight
.DrawString("This is another test", _
mFont, Brushes.Black, xPos, yPos)
xPos += .MeasureString("This is another test", mFont).Width
.DrawString("Here's some more text", _
mFont, Brushes.Black, xPos, yPos)
xPos = e.MarginBounds.Left
End With
==> Anzeigen des SeitenSetupDialoges:
Dim psdlg As New PageSetupDialog()
psdlg.Document = mDoc
psdlg.ShowDialog()
==> Anzeigen des Vorschaudialoges:
Dim prprvdlg As New PrintPreviewDialog()
prprvdlg.Document = mDoc
prprvdlg.WindowState = FormWindowState.Maximized
prprvdlg.ShowDialog()
==> Anzeigen des DruckDialoges:
Dim prdlg As New PrintDialog()
prdlg.Document = mDoc
If prdlg.ShowDialog = DialogResult.OK Then
mDoc.Print()
End If
End Sub
3.) Aufrufen des Sub zum Drucken nach Betätigung eines Buttons:
PublicSubPictureBoxPreviewAndPrint_Click(sender AsObject, e AsEventArgs) HandlesPictureBoxPreviewAndPrint.Click
CallmDoc_PrintPage(Me, ) ===> Was muss ich hier für das Argument 'e' angeben????
End Sub
So langsam glaube ich, ich bin blöd, aber ich bekomm's nicht raus :o(
-
Den PrintPage-Handler muss man nicht aufrufen. Es würde im Normalfall auch nicht viel bringen. Sobald du mDoc.Print() aufrufst, wird der PrintPage-Handler automatisch ausgeführt. Das wäre dann der letzte Schritt von 2.
Das Dokument (mDoc) enthält auch die eingestellten Druckerdaten usw. Darum brauchst du dich also auch nicht kümmern.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Samstag, 9. November 2013 21:13
- Als Antwort markiert Mib76 Samstag, 9. November 2013 21:19