Застарілі поля форми
Застарілі поля форми
Aspose.Words FOSS для .NET читає та маніпулює застарілими (до-контент-контролю) полями форми Word — полями вводу тексту, прапорцями та випадаючими списками — через клас FormField та його три спеціалізовані підкласи полів у Aspose.Words.Fields.
Читання значень полів форми
Document.Range.FormFields (a 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).
Чи це те саме, що сучасні content controls?
Ні. Спадкові поля форми (FORMTEXT, FORMCHECKBOX, FORMDROPDOWN) існували ще до моделі структурних тегів документа Word (content control); обидва можуть бути в одному документі.
API Reference Підсумок
| Клас / Метод | Опис |
|---|---|
Document.Range.FormFields | Прямий доступ до всіх застарілих полів форми у діапазоні |
FormField | Загальний вузол застарілого поля форми: ім’я, тип, результат, стан увімкнення |
FormFieldCollection | Колекція об’єктів FormField; індексатор за назвою закладки, Remove() |
FieldFormText | FORMTEXT клас поля |
FieldFormCheckBox | FORMCHECKBOX клас поля |
FieldFormDropDown | FORMDROPDOWN клас поля |
TextFormFieldType | Enum для формату вводу текстового поля (Regular, Number, Date тощо) |
DropDownItemCollection | Редагований список варіантів випадаючого поля |