Campi del modulo legacy
Campi modulo legacy
Aspose.Words FOSS per .NET legge e manipola i campi modulo legacy di Word (pre-content-control) — campi di input testo, casella di controllo e a discesa — tramite la classe FormField e le sue tre sottoclassi specializzate di campo in Aspose.Words.Fields.
Lettura dei valori dei campi modulo
Document.Range.FormFields (un FormFieldCollection) fornisce accesso diretto a ogni campo modulo legacy in un intervallo senza dover percorrere manualmente l’albero dei nodi. Ogni FormField espone Name (l’identificatore in stile segnalibro usato per fare riferimento al campo), Type (un valore FieldType che identifica il tipo di campo modulo), Result (il valore corrente), Enabled, e il testo di aiuto/status tramite HelpText/OwnHelp e StatusText/OwnStatus. SetTextInputValue(newValue) imposta direttamente un nuovo valore per un campo di input testo. Indicizza FormFieldCollection per nome segnalibro (ad es. formFields["BookmarkName"]) per recuperare un campo specifico, e Remove(formField) / RemoveAt(index) eliminano i campi dalla collezione.
Tipi di campo testo, casella di controllo e a discesa
I tre tipi di campo modulo legacy hanno ciascuno una classe dedicata: FieldFormText (il campo FORMTEXT, corrispondente a FieldType.FieldFormTextInput) per input di testo libero, FieldFormCheckBox (il campo FORMCHECKBOX) per un interruttore booleano, e FieldFormDropDown (il campo FORMDROPDOWN) per una lista di selezione. Sul nodo FormField sottostante, TextInputType (un valore TextFormFieldType — Regular, Number, Date, CurrentDate, CurrentTime o Calculated) e TextInputFormat controllano come il valore di un campo di testo è interpretato e formattato; MaxLength limita la lunghezza dell’input; TextInputDefault fornisce il valore predefinito. Checked e Default si applicano ai campi casella di controllo, con IsCheckBoxExactSize/CheckBoxSize che controllano la dimensione renderizzata. I campi a discesa contengono la loro lista di opzioni in DropDownItems, un DropDownItemCollection che supporta Add, Insert, Remove, Contains e IndexOf, più DropDownSelectedIndex per l’elemento attualmente selezionato.
Suggerimenti e migliori pratiche
- Usa
Document.Range.FormFieldsinvece di filtrare manualmenteDocument.Range.Fieldsper tipo — è il punto di ingresso diretto e tipizzato per i campi modulo legacy. - Imposta
CalculateOnExitquando il valore di un campo modulo deve attivare il ricalcolo dei campi dipendenti non appena l’utente lo abbandona. FormField.EntryMacro/ExitMacrofanno riferimento ai nomi delle macro VBA configurati nel documento originale — leggerli non esegue alcun codice macro.- Controlla
TextInputTypeprima di analizzare ilResultdi un campo di testo come numero o data — i campiRegularnon impongono alcuna restrizione di formato.
Problemi comuni
| Problema | Cause | Correzione |
|---|---|---|
Indicizzazione di FormFieldCollection per nome segnalibro restituisce null | Il nome segnalibro del campo del modulo non corrisponde, oppure il campo non esiste nell’intervallo cercato | Conferma il nome segnalibro esatto tramite FormField.Name durante l’enumerazione |
Lo stato della casella di controllo non viene riflesso dopo aver impostato Checked | Documento non salvato dopo la modifica | Salva il documento dopo la modifica; Checked viene letto al successivo accesso |
Menu a discesa DropDownSelectedIndex fuori dall’intervallo | L’indice non corrisponde a un elemento in DropDownItems | Convalida l’indice rispetto a DropDownItems.Count prima di impostarlo |
| Valore del campo di testo non applicato | Usata assegnazione diretta della proprietà invece di SetTextInputValue | Chiama SetTextInputValue(newValue) sul FormField |
FAQ
Qual è la differenza tra FormField e FieldFormText/FieldFormCheckBox/FieldFormDropDown?
FormField è il nodo generico che rappresenta qualsiasi campo modulo legacy, raggiungibile tramite Document.Range.FormFields. FieldFormText, FieldFormCheckBox e FieldFormDropDown sono le classi specifiche del campo (derivate da Field) per ogni tipo di campo quando si lavora invece attraverso la collezione generale Field.
Come posso ottenere tutti i valori dei campi modulo in un documento?
Elenca Document.Range.FormFields e leggi Name/Result su ogni FormField.
Posso aggiungere opzioni a un campo modulo a discesa?
Sì — FormField.DropDownItems è un DropDownItemCollection con Add(value), Insert(index, value) e Remove(name).
Sono questi gli stessi dei controlli di contenuto moderni?
No. I campi modulo legacy (FORMTEXT, FORMCHECKBOX, FORMDROPDOWN) precedono il modello di tag di documento strutturato (controllo di contenuto) di Word; entrambi possono comparire nello stesso documento.
API Reference Riepilogo
| Classe / Metodo | Descrizione |
|---|---|
Document.Range.FormFields | Accesso diretto a tutti i campi del modulo legacy in un intervallo |
FormField | Nodo generico di campo modulo legacy: nome, tipo, risultato, stato abilitato |
FormFieldCollection | Raccolta di oggetti FormField; indicizzatore per nome segnalibro, Remove() |
FieldFormText | FORMTEXT classe campo |
FieldFormCheckBox | FORMCHECKBOX classe del campo |
FieldFormDropDown | FORMDROPDOWN classe del campo |
TextFormFieldType | Enum per il formato di input del campo di testo (Regular, Number, Date, ecc.) |
DropDownItemCollection | Elenco modificabile delle opzioni di un campo a discesa |