Устаревшие поля формы

Устаревшие поля формы

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Редактируемый список вариантов выпадающего поля

См. также:

 Русский