Ganze Form Ducken ?

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Dr.PsycH0Ooo.

    Ganze Form Ducken ?

    Hallo !

    Kann man eine ganze Form drucken ? wenn ja wie ?
    und gibts bessere möglichkeiten ?

    Bin nicht sehr fortgeschritten in vb

    will rechnungen für kunden drucken /würde jz alle notwentigen daten per label oderso einfügen.

    mfg
    Hallo,

    ich hatte das bei einem Projekt auch einmal per Screenshot versucht, das gefiel mir allerdings nicht so, sah irgendwie matschig aus. Funktionierte über DrawToBitmap, hier war der Thread.

    Die andere Möglichkeit ist, dass du alles von Hand positionierst, was und wo es gedruckt werden soll.
    Du musst also z.B. die X und Y Position für jede Textbox, die du in deiner Form hast und drucken willst angeben. Ist beim ersten Erstellen etwas mühselig, sieht aber dann beim Drucken besser aus.

    Das Drucken ist scheinbar generell nirgends gut und ausführlich beschrieben.
    Hier hast du mal einen Ansatz, um ein bisschen zu probieren.

    Mein Bruder hat das Drucken mal als PDF erstellt. Hatte den Vorteil, dass du z.B. Rechnungen direkt als PDF abspeichern konntest und beim Drucken hattest du automatisch das Adobe Druckmenü. Allerdings findet er das nicht mehr, und weiß auch nicht mehr wie er das gemacht hatte :( .

    Gruß
    HerrFrie
    Ich würds auch so ähnlich machen, also das Drucken an annere Anwendungen delegieren. Ich hab zB. gerne nach Excel exportiert - da kann man ja endlos nach-arbeiten, bisses wirklich passt.
    Oder sich auch eine Vorlage erstellen, in die immer hinein-exportiert wird, dann passen gleichartige Ausdrucke auch gleichartig.
    Ich habe ein meinem Vokabeltrainer eine Print-Funktion eingebaut und mir hat es auch nicht gefallen direkt die Form zu drucken.

    1. Es ist unscharf.
    2. Die Form enthält Elemente wie Menüleisten und Buttons, die fürs Drucken nicht relevant sind.

    Excel hat aber auch den Nachteil, dass es sicher nicht jeder installiert hat und unter Linux/Mono wirst du es wohl auch nicht zum Laufen bringen.

    Ich habe im Vokabeltrainer die Druckfunktion deshalb so gelöst:

    Im Form einen PrintDialog erstelle und ein PrintDocument (findest du in der ToolBar).
    Im Quellcode brauchst du dann erstmal eine Funktion zum zeigen des Dialogs z. B.

    VB.NET-Quellcode

    1. Public Sub ShowPrinterDlg() Handles BspButton.Click
    2. If PrinterDlg.ShowDialog() = DialogResult.OK Then
    3. PrinterDocument.DocumentName = "Bsp. Name"
    4. PrinterDocument.PrinterSettings = DruckerDialog.PrinterSettings
    5. PrinterDocument.DefaultPageSettings.Landscape = True 'Für Querformat
    6. PrinterDocument.Print()
    7. End If
    8. End Sub


    Du musst aber auch noch definieren, wie eine Seite aussehen soll. Dazu erstellst du auch wieder eine Funktion die beim PrintPage-Event des PrinterDocuments aufgerufen wird, z.B.:

    VB.NET-Quellcode

    1. Public Sub DruckerSeiteErstellen(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrinterDocument.PrintPage
    2. e.Graphics.DrawString("Beispieltext", Form1.Font, Color.Black, New System.Drawing.Point(e.MarginBounds.X, e.MarginBounds.Y))
    3. End Sub
    Am besten lernt man, mit Excel-VBA umzugehen, indem man in Excel ein paar Makros schreibt - etwa, ein paar Werte in eine bestimmte Tabelle generieren.

    Dazu kann man auch den generierten Code des Makro-Recorder als Vorlage verwenden - aber vorsicht!! der Code funzt zwar, ist aber absolut grauenhaft.

    Wennde mit Excel-VBA so leidlich klarkommst, kannstedir von VB.Net ein Excel-Workbook öffnen, und dann sind die Befehle sehr ähnlich.

    Aber poste deine Samples erstmal hier, weil Anfänger-VBA-Code weist üblicherweise enormes OptimierungsPotential auf (habichdasnichnett formuliert? ;) )
    hey

    dieser code

    VB.NET-Quellcode

    1. Public Sub DruckerSeiteErstellen(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrinterDocument.PrintPage
    2. e.Graphics.DrawString("Beispieltext", Form1.Font, Color.Black, New System.Drawing.Point(e.MarginBounds.X, e.MarginBounds.Y))
    3. End Sub


    geht bei mir leider nicht - muss ich noch was importieren (mit imports) ?

    lg