Устаревшие поля формы
Устаревшие поля формы
Aspose.Words FOSS для .NET читает и изменяет устаревшие (до-контроля содержимого) поля формы Word — текстовый ввод, флажок и раскрывающийся список — через класс FormField и его три специализированных подкласса полей в Aspose.Words.Fields.
Чтение значений полей формы
Document.Range.FormFields (это FormFieldCollection) предоставляет прямой доступ к каждому устаревшему полю формы в диапазоне без ручного обхода дерева узлов. Каждый FormField раскрывает Name (идентификатор в стиле закладки, используемый для ссылки на поле), Type (значение FieldType, определяющее тип поля формы), Result (текущее значение), Enabled, а также текст справки/статуса через HelpText/OwnHelp и StatusText/OwnStatus. SetTextInputValue(newValue) устанавливает новое значение текстового поля напрямую. Индексируйте FormFieldCollection по имени закладки (например, formFields["BookmarkName"]), чтобы получить конкретное поле, и Remove(formField) / RemoveAt(index) удаляют поля из коллекции.
Типы полей: текст, флажок и раскрывающийся список
У каждого из трёх типов устаревших полей формы есть отдельный класс: FieldFormText (поле FORMTEXT, соответствующее FieldType.FieldFormTextInput) для ввода свободного текста, FieldFormCheckBox (поле FORMCHECKBOX) для логического переключателя и FieldFormDropDown (поле FORMDROPDOWN) для списка выбора. На базовом узле FormField TextInputType (значение TextFormFieldType — Regular, Number, Date, CurrentDate, CurrentTime или Calculated) и TextInputFormat управляют тем, как значение текстового поля интерпретируется и форматируется; MaxLength ограничивает длину ввода; TextInputDefault задаёт значение по умолчанию. Checked и Default применяются к полям-флажкам, при этом IsCheckBoxExactSize/CheckBoxSize контролируют их визуальный размер. Поля-раскрывающие списки хранят свой список вариантов в DropDownItems, DropDownItemCollection, поддерживающем Add, Insert, Remove, Contains и IndexOf, а также DropDownSelectedIndex для текущего выбранного элемента.
Советы и лучшие практики
- Используйте
Document.Range.FormFieldsвместо ручной фильтрацииDocument.Range.Fieldsпо типу — это прямой, типизированный входной пункт для устаревших полей формы. - Установите
CalculateOnExit, когда значение поля формы должно инициировать пересчёт зависимых полей сразу после того, как пользователь покинет его. FormField.EntryMacro/ExitMacroссылаются на имена макросов VBA, настроенные в оригинальном документе — их чтение не выполняет код макроса.- Проверьте
TextInputTypeперед разборомResultтекстового поля как числа или даты — поляRegularне накладывают ограничений формата.
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
Индексация FormFieldCollection по имени закладки возвращает null | Имя закладки поля формы не совпадает, или поле не существует в выбранном диапазоне | Подтвердите точное имя закладки через FormField.Name при перечислении |
Состояние флажка не отражается после установки Checked | Документ не сохранён после изменения | Сохраните документ после изменения; Checked читается при следующем доступе |
Выпадающий список DropDownSelectedIndex выходит за пределы диапазона | Индекс не соответствует элементу в DropDownItems | Проверьте индекс относительно DropDownItems.Count перед установкой |
| Значение текстового поля не применено | Использовано прямое присваивание свойства вместо SetTextInputValue | Вызовите SetTextInputValue(newValue) на FormField |
FAQ
В чём разница между FormField и FieldFormText/FieldFormCheckBox/FieldFormDropDown?
FormField — это универсальный узел, представляющий любое устаревшее поле формы, доступный через Document.Range.FormFields. FieldFormText, FieldFormCheckBox и FieldFormDropDown являются классами, специфичными для полей (наследующими Field) для каждого типа поля при работе через общую коллекцию Field.
Как получить все значения полей формы в документе?
Перечислить Document.Range.FormFields и прочитать Name/Result на каждом FormField.
Можно ли добавить варианты в выпадающее поле формы?
Да — FormField.DropDownItems представляет собой DropDownItemCollection с Add(value), Insert(index, value) и Remove(name).
Являются ли они теми же, что современные элементы управления содержимым?
Нет. Устаревшие поля формы (FORMTEXT, FORMCHECKBOX, FORMDROPDOWN) появились до модели структурированных тегов документа Word (элемент управления содержимым); обе могут присутствовать в одном документе.
API Reference Сводка
| Класс / Метод | Описание: |
|---|---|
Document.Range.FormFields | Прямой доступ ко всем устаревшим полям формы в диапазоне |
FormField | Общий узел устаревшего поля формы: имя, тип, результат, состояние включения |
FormFieldCollection | Коллекция объектов FormField; индексатор по имени закладки, Remove() |
FieldFormText | Класс поля FORMTEXT |
FieldFormCheckBox | класс поля FORMCHECKBOX |
FieldFormDropDown | класс поля FORMDROPDOWN |
TextFormFieldType | Перечисление формата ввода текстового поля (Regular, Number, Date и т.д.) |
DropDownItemCollection | Редактируемый список вариантов выпадающего поля |