Benutzer mit den meisten Antworten
Druckproblem

Frage
-
Public Class formular Public Property MdiList() As Boolean Get End Get Set(ByVal value As Boolean) End Set End Property Private Sub formular_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load SetMDIList() End Sub Public Sub SetMDIList() Dim menuItem1 As New ToolStripMenuItem("Fenster") Me.MainMenuStrip.Items.Add(menuItem1) Me.MainMenuStrip.MdiWindowListItem = menuItem1 End Sub Private Sub FensterToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FensterToolStripMenuItem.Click Dim NewMDIChild As New Form2() 'Set the Parent Form of the Child window. NewMDIChild.MdiParent = Me 'Display the new form. NewMDIChild.Show() NewMDIChild.Name = "MDIChild" End Sub Private Sub DruckenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DruckenToolStripMenuItem.Click PrintForm1.Print(Me.ActiveMdiChild, PowerPacks.Printing.PrintForm.PrintOption.ClientAreaOnly) End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.WindowState = FormWindowState.Maximized End Sub End Class
3 Probleme:
1. Das Bild im MDI Child wird richtig ausgedruckt, der Text aber nicht...
2. Wie kann ich den Seitenrand einstellen?
3. Wie kann ich Form2(Später MDI CHild) so anpassen, dass es beim Drucken genau eine A4 Seite wird?
LG Yves Riedener
Antworten
-
zu 1.)
PrintForm1.Print(Me.ActiveMdiChild, PowerPacks.Printing.PrintForm.PrintOption.CompatibleModeClientAreaOnly)
Siehe auch den Hinweis unter:
Gewusst wie: Drucken des Clientbereichs eines Formulars (Visual Basic)
http://msdn.microsoft.com/de-de/library/bb629256.aspx
zu 2.)
Folgendes Beispiel legt die Seitenränder auf 1cm fest:
Private Sub PrintForm1_QueryPageSettings(ByVal sender As Object, _ ByVal e As System.Drawing.Printing.QueryPageSettingsEventArgs) Handles PrintForm1.QueryPageSettings Dim lMargin As Integer = CInt((1 / 2.54) * 100) With e.PageSettings.Margins .Top = lMargin - CInt(e.PageSettings.HardMarginY) .Left = lMargin - CInt(e.PageSettings.HardMarginX) .Right = lMargin .Bottom = lMargin End With End Sub
zu 3.)
Muss ich leider passen.
Thorsten Dörfler
Microsoft MVP Visual Basic- Als Antwort vorgeschlagen Robert BreitenhoferModerator Freitag, 6. November 2009 15:14
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 10. November 2009 10:06
Alle Antworten
-
zu 1.)
PrintForm1.Print(Me.ActiveMdiChild, PowerPacks.Printing.PrintForm.PrintOption.CompatibleModeClientAreaOnly)
Siehe auch den Hinweis unter:
Gewusst wie: Drucken des Clientbereichs eines Formulars (Visual Basic)
http://msdn.microsoft.com/de-de/library/bb629256.aspx
zu 2.)
Folgendes Beispiel legt die Seitenränder auf 1cm fest:
Private Sub PrintForm1_QueryPageSettings(ByVal sender As Object, _ ByVal e As System.Drawing.Printing.QueryPageSettingsEventArgs) Handles PrintForm1.QueryPageSettings Dim lMargin As Integer = CInt((1 / 2.54) * 100) With e.PageSettings.Margins .Top = lMargin - CInt(e.PageSettings.HardMarginY) .Left = lMargin - CInt(e.PageSettings.HardMarginX) .Right = lMargin .Bottom = lMargin End With End Sub
zu 3.)
Muss ich leider passen.
Thorsten Dörfler
Microsoft MVP Visual Basic- Als Antwort vorgeschlagen Robert BreitenhoferModerator Freitag, 6. November 2009 15:14
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 10. November 2009 10:06
-
Danke habe den Fehler gefunden:
PrintForm1.Print(Me.ActiveMdiChild, PowerPacks.Printing.PrintForm.PrintOption.CompatibleModeClientAreaOnly)
Statt:
PrintForm1.Print(Me.ActiveMdiChild, PowerPacks.Printing.PrintForm.PrintOption.ClientAreaOnly)
LG Yves Riedener -
Doch es gibt noch ein Problem! Denn wenn ich CompatibleModeClientAreaOnly nehme kommt nur das was Man sieht, das gescrollte kommt nicht und man sieht den Textstrich! Wenn ich aber dann Scrollable nehme sieht man den Text wieder nich! Und beides kann ich nicht nehmen.
Was muss ich tun?
LG Yves Riedener -
Hallo Yves,
Was must Du tun? Dich von dem Gedanken verabschieden, Dein Formular, das für die Darstellung am Bildschirm optimiert ist, unverändert auf einem Drucker ausgeben zu können, der eine weit höhere Auflösung unterstützt.
Das Framework hält hier einige passende Komponenten bereit, die Du nutzen kannst. Ein Beispiel:
http://www.startvbdotnet.com/controls/printdialog.aspx
Ich weiß leider nicht, was Du auf Deinem zu druckenden Formular darstellst. Aber ggf. gibt es hier noch andere Alternativen, z.B. in Form von Reports
Thorsten Dörfler
Microsoft MVP Visual Basic -
Hallo Yves,
das Drucken ist auch für gestandene Entwickler immer wieder ein leidiges Thema. Klar geht das, aber das ist mit sehr viel Aufwand verbunden. Einen ersten Eindruck davon vermittelt dir übrigens der von Thorsten genannte Link - und es ist wirklich nur ein erster Eindruck.
Um individuell zu Drucken, musst du die Druckausgabe als Graphics selbst zeichnen. Dann musst du dich mit solchen Fragen beschäftigen wie "wann mache ich einen Zeilenumbruch?", was nämlich nicht automatisch passiert. Du musst die Auflösung des Bildschirms auf den Drucker umrechnen, Font-Objekte erstellen, mit MeasureString überprüfen, wieviel Platz der Text auf dem Papier einnehmen wird, und und und...
Insofern: Ja, das kann man manuell mit Code machen.
Das einfachste ist sicherlich - wie von Thorsten bereits angedeutet - die Reports dafür zu verwenden. Das wird dir aber leider auch nicht ohne weiteres gelingen. Neben den Grundlagen musst du dich für die Reports zuvor auch mit ADO.NET und insbesondere den DataSets auseinander setzen.
Viele Grüße
Jan