Verzeichnis drucken

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Akanel.

    Verzeichnis drucken

    Hallo zusammen,

    ich möchte gerne ein Gefahrstoffverzeichnis drucken das wie folgt aussehen soll.



    Ich scheitere aber schon daran wie man am gescheitesten das Gerüst zeichnet.
    Meine Idee war in jeder Zeile, jede Zelle einzeln mit einem Rectangle zu Zeichnen. Das würde ich wohl mit einer List(of Rectangle) hinbekommen.
    Da weiss ich dann aber wiederum nicht wie ich den Inhalt in die richtige Zelle bekomme.
    Das nächste Problem wäre dann das die Zellen eine feste Breite haben können, die höhe aber sollte sich nach dem Inhalt richten. Und das wirkt sich dann auch auf die ganze Zeile aus, die Zeilenhöhe sollte sich dann nach der höchsten Zelle richten.

    Ich glaube das ist nicht ganz so trivial wie ich mir das dachte, aber ich möchte versuchen es umzusetzen.

    Kann mir da jemand Helfen und vielleicht sagen wie man dies am besten löst?

    Frohe Weihnachten.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    @Akanel Das Zauberwort heißt "Tabelle drucken".
    Du musst von jeder Zelle wissen, wie groß der Inhalt ist. Dazu kannst Du mit Graphics.MeasureString() die Größe des grdruckten Tetes ermitteln.
    Da musst Du die Größe halt über alle Spalten einer Zeile bzw. alle Zeilen einer Spalte berechnen.
    Wie Du den Text in ein Rechteck zwängst, gugst Du hier: Drucken mehrseitiger Dokumente
    Die Icons gehen dann analog.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    naja, du brauchst ein Datenmodell der Tabellenspalten, was die Druck-relevanten Eigenschaften angibt: HeaderText, Breite, Font.
    Eiglich auch den Bild-Darstellungs-Stil, aber da scheints ja nur einen zu geben, also kann der auch hardcodet wern.
    (Das allein wird übrigens schon ziemlich heftig, die korrekten Positionen der Bildles auszurechnen)

    Und natürlich ein Datenmodell der zu druckenden Datensätze.
    Ich würde nicht jedes Rechteck einzeln zeichnen, sondern sukzessive senkrechte und waagerechte Linien.
    Oder noch besser: Erstmal gar keine Linien, sondern nur die Inhalte.
    Weil letztlich ergibt sich erst beim Zeichnen der Inhalte, wo die Linien zu plazieren sind.

    Das bedeutet: Das Modell muss auch eine Liste der Zeilenhöhen vorhalten, und die wird erst während des Druck-Vorgangs befüllt.
    Tatsächlich gehts um eine Liste der Seiten, und jede Seite hält eine Liste der Zeilenhöhen. Na, vlt auch nicht.

    was bedeutet eiglich "die Spalten können feste Breite haben"? Manche ja, andere nicht? - dann muss das auch im Datenmodell stehen.

    Also tatsächlich keine Kleinigkeit, die du dir da vorgenommen hast.

    Ich täte empfehlen, du entwickelst erstmal gegen ein einfaches Testform. das Theater mittm PrintDialog, Printersettings, Printpreview kannste dir aufheben für wenn du ühaupt imstande bist, die Tabelle wie gewünscht darzustellen.

    Oder noch eine Idee: Bastel dir kein eigenes DruckAuftrag-Datenmodell, sondern missbrauch einfach ein DGV dafür.
    DGV hat ja Header, Spalten, Zeilen, ColumnStyles und PiPaPo, und verfügt auch über eine schnucklige AutoSizing-Funktionalität.
    Also kannst du zur Entwicklung ein DGV hernehmen, und codeseitig so zurechtfrickeln, dass die Zeilen und Spalten "passen", und dann deinen Kram da einzeichnen.
    Später dann lässte das DGV unsichtbar, und verlegst die Zeichnung (mit paar Anpassungen) ins PrintDocument.
    Aber gut im Code dokumentieren, der Ansatz ist recht unorthodox!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Danke euch beiden für Eure Antworten.
    Da dies doch etwas komplexer ist werde ich mich da wohl erst nach den Feiertagen, wenn ich etwas mehr ruhe habe, mit beschäftigen.
    Hierzu muss ich noch einiges nachlesen und Verstehen. Es werden aber sicher noch Fragen meinerseits kommen, da ich Eure beiden Vorschläge ausprobieren möchte.

    ErfinderDesRades schrieb:

    Und natürlich ein Datenmodell der zu druckenden Datensätze.


    Diese habe ich bereits erstellt. Das hat mir auch Kopfzerbrechen bereitet, ich habe mich dann vorerst für eine einfache Variante entschieden.
    Das jetzt hier zu schreiben würde wohl das Thema verfehlen, dazu mache ich dann vielleicht einen gesonderten Thread und würde dich direkt ansprechen, wenn das in Ordnung ist.

    ErfinderDesRades schrieb:

    was bedeutet eiglich "die Spalten können feste Breite haben"

    Berechtige frage. Da habe ich mich wohl falsch ausgedrückt.
    Da ja alles auf ein DIN A4 passen soll, MÜSSEN die Spalten eine feste Breite haben, nur die Höhe soll sich je nach Inhalt anpassen.
    Auf dem Bild im ersten Post sieht man einen Ausschnitt wie es mit Excel gemacht wurde. Die Anordnung der Bilder zum beispiel muss nicht so sein.
    Da dachte ich mir ich mache die Bilder nebeneinander wenn er nur 2 sind, bei mehr als 2 Bildern dann eine neue reihe.
    Oder aber ich mache von vornherein alle Bilder untereinander.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.