Domanda

Il mio problema è che ho creato un "estesa" controllo RichTextBox che utilizza API native per aggiungere molte funzionalità RichEdit che mancano dal controllo standard (vale a dire: la modifica di una singola proprietà di font su una selezione w / o cambiare l'altro proprietà dei font, capo automatico a una stampante [come WordPad], ecc). Come parte del controllo espongo un PrintDocument che viene utilizzato per stampare il contenuto formattato del RichTextBox. Quando ritorno a capo automatico è impostato su "Wrap alla stampante" Ho SendMessage il messaggio EM_SETTARGETDEVICE al RichTextBox e farla avvolgere alla lunghezza appropriata.

Il tutto funziona bene quando qualcosa (utente / codice) modifica la proprietà WordWrap del mio controllo. Tuttavia, se il PrintDocument è modificato dopo che non ho modo di saperlo. Così, anche se l'utente potrebbe aver cambiato i margini sulla PrintDocument mia RichTextBoxEx non inviare nuovamente l'EM_SETTARGETDEVICE per la nuova larghezza fino a quando la proprietà WordWrap viene modificata.

Vedo alcune opzioni per superare questo, ma io non sono un grande fan di una di esse. Ecco quello che ho:

  1. Aggiungere un metodo o simile UpdatePrintDocument () che avrebbe bisogno di essere chiamato dopo che qualcosa di esterno dal controllo (vale a dire: un PageSetupDialog sulla forma del genitore) ha aggiornato le impostazioni nel PrintDocument. Contro: Sarò distribuendo il controllo in modo che vorrei renderlo il più accogliente possibile. Mentre io possa ricordare di chiamare il metodo in qualsiasi momento mi aggiornare correttamente le impostazioni di PrintDocument qualcun altro non potrebbe. Pro: E 'semplice da implementare

  2. .
  3. Creare una nuova classe PrintDocumentEx che le basi da PrintDocument e implementa gli eventi necessari "cambiate". Contro: Potrebbe non essere sufficiente, potrebbe essere necessario creare PrintSettingsEx, PageSettingsEx, ecc .. Pro:. Implementare una sola volta e nessuno deve preoccuparsi di nuovo

Credo davvero che 2 # è l'opzione che ho intenzione di andare con, ma non è molto riutilizzabile per la successiva istanza ho bisogno di alcune funzionalità simile. Credo che quello che sto cercando è un modo per collegare un "evento PropertyChanged generico" a qualsiasi proprietà classi esistenti in quanto questo sarebbe applicabile in situazioni future. Ansioso di vedere ciò che voi ragazzi avete per me: -)

È stato utile?

Soluzione 2

Basta seguito che la mia PrintDocumentEx (e associati) classificata non ha funzionato. Guardando dentro i controlli e le relative PrintDialog è perché usano metodi nativi per aggiornare il acctually PrintDocument. Così gli eventi ho attaccato alla proprietà nelle mie classi "ex" mai licenziato perché la funzione di accesso set è stato mai invocato.

Altri suggerimenti

Se ho capito la sua domanda, le informazioni di cui avete bisogno è inviato quando la proprietà WordWrap viene modificata.

Quando le altre cose sono cambiate, eventi aggiorna lo Stampa documento. La prossima volta che la proprietà WordWrap si cambia tutte le informazioni vengono inviate.

Il modo hack per risolvere questo problema è quindi di modificare la proprietà WordWrap, ogni volta che si modifica una proprietà che si desidera inviare alla stampa del documento. Cambiarlo in un valore temporaneo, poi cambiare di nuovo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top