Frage

Mein Problem ist, dass ich ein „erweiterte“ RichTextBox-Steuerelement erstellt, die native API verwendet viele RichEdit Funktionen hinzuzufügen, die von der Standardsteuerung fehlen (dh: eine einzige Schrift Eigenschaft auf einer Auswahl Modifizieren w / o die andere Veränderung Schrifteigenschaften, Wort an einen Drucker wrap [wie WordPad], etc.). Im Rahmen der Kontrolle aussetzen ich ein Printdocument, das den formatierten Inhalt der RichTextBox drucken verwendet wird. Wenn wordwrap ist auf I „Zum Drucker Wrap“ Sendmessage die EM_SETTARGETDEVICE Mitteilung an den RichTextBox und führen es auf die passende Länge wickeln.

Das alles funktioniert gut, wenn etwas (Benutzer / Code), um die Eigenschaft WordWrap meine Kontrolle ändert. Wenn jedoch der Printdocument danach modifiziert habe ich keine Möglichkeit, es zu wissen. Also auch wenn der Benutzer die Ränder auf der Printdocument geändert haben kann meine RichTextBoxEx erneut nicht die EM_SETTARGETDEVICE für die neue Breite, bis die WordWrap Eigenschaft geändert wird.

Ich sehe ein paar Möglichkeiten, dies zu überwinden, aber ich bin kein großer Fan von irgendwelchen von ihnen. Hier ist, was ich habe:

  1. Fügen Sie eine UpdatePrintDocument () -Methode oder ähnlich, die extern zu der Kontrolle nach etwas genannt werden müssten (dh ein Pagesetup auf das übergeordnete Formular) die Einstellungen in der Printdocument aktualisiert. Nachteile: Ich werde die Kontrolle der Verteilung werden, damit ich es so freundlich wie möglich machen möchten. Während ich ich ein Update, das Verfahren jederzeit anrufen erfolgreich die Printdocument-Einstellungen jemand anderes vielleicht nicht erinnern sich vielleicht. Pro: Es ist einfach zu implementieren

  2. .
  3. Erstellen Sie eine neue, PrintDocumentEx Klasse, die Basen von Printdocument und implementiert die benötigten „Changed“ Ereignisse. Nachteile: Könnte nicht ausreichen, müssen PrintSettingsEx, PageSettingsEx, etc .. Pro erstellen. Implementieren Sie einmal und niemand davon wieder zu befürchten hat

Ich denke, # wirklich 2 ist die Option, die ich mit zu gehen haben werde, aber es ist nicht sehr wiederverwendbar für die nächste Instanz ich einige similiar Funktionalität benötigen. Ich denke, was ich suche eine Möglichkeit ist es, eine „allgemeine Property Ereignis“, um alle vorhandenen Klassen Eigenschaft zu befestigen, da dies in Zukunft Situationen anwendbar wäre. Ängstliche, um zu sehen, was du für mich: -)

War es hilfreich?

Lösung 2

Folgende nur auf, dass mein PrintDocumentEx (und die damit verbundenen) eingestuft hat nicht funktioniert. Ein Blick in die Printdialog und die damit verbundenen Kontrollen ist es, weil sie native Methoden verwenden, um acctually die Printdocument zu aktualisieren. So sind die Ereignisse, die ich in meiner „Ex“ Klassen zu den Eigenschaften angebracht nie, weil das Set Accessor gefeuert wurde nie aufgerufen.

Andere Tipps

Wenn ich Ihre Frage richtig verstanden habe, die Informationen, die Sie benötigen, gesendet wird, wenn die WordWrap Eigenschaft geändert wird.

Wenn andere Dinge geändert werden, aktualisiert keine Ereignisse Dokument drucken. Das nächste Mal wird die Eigenschaft WordWrap alle Informationen geändert wird gesendet.

Der Hack Weg, dies zu beheben, ist dann die WordWrap Eigenschaft zu ändern, wenn Sie eine Eigenschaft ändern, die Sie das Dokument drucken senden mögen. Ändern Sie es in einen temporären Wert, dann ändern wieder zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top