Changing Checkbox State in Word Templates with RadWordsProcessing
Environment
Product Version | Product | Author |
---|---|---|
2024.2.426 | RadWordsProcessing | Yoan Karamanov |
Description
When working with Word templates that include checkboxes as content controls, you may need to change the state of a checkbox based on certain conditions. This KB article provides a method to programmatically check or uncheck a checkbox using the RadWordsProcessing library.
This KB article also answers the following questions:
- How can I programmatically check a checkbox in a Word document?
- How do I modify the state of a checkbox in a Word template?
- What is the method to change checkbox states in Word documents using C#?
Solution
To change the state of a checkbox in a Word document, follow these steps:
- Identify the content control that represents the checkbox.
- Change the checkbox's state to either checked or unchecked.
- Update the visual representation of the checkbox accordingly.
Below is a method that demonstrates how to achieve this:
private static void ChangeCheckboxState(SdtRangeStart sdt)
{
if (sdt == null || sdt.SdtProperties.Type != SdtType.CheckBox)
{
return;
}
// Get the paragraph that is parent of the checkbox
Paragraph paragraph = sdt.Paragraph;
// Get the index of the SDT start in the paragraph's child collection
int index = paragraph.Inlines.IndexOf(sdt);
// Get the Run that represents the checkbox' value
Run checkBoxValue = paragraph.Inlines[index + 1] as Run;
CheckBoxProperties properties = (CheckBoxProperties)sdt.SdtProperties;
if (!properties.Checked.HasValue || !properties.Checked.Value)
{
properties.Checked = true;
if (checkBoxValue != null)
{
checkBoxValue.Properties.FontFamily.LocalValue = new ThemableFontFamily(properties.CheckedState.Font);
checkBoxValue.Text = ((char)properties.CheckedState.CharacterCode).ToString();
}
}
else
{
properties.Checked = false;
if (checkBoxValue != null)
{
checkBoxValue.Properties.FontFamily.LocalValue = new ThemableFontFamily(properties.UncheckedState.Font);
checkBoxValue.Text = ((char)properties.UncheckedState.CharacterCode).ToString();
}
}
}
To apply this method, iterate through the content controls in your document, and call ChangeCheckboxState
for each checkbox you wish to modify. Alternatively, get the first SdtRangeStart and update its state:
SdtRangeStart stdStart = document.EnumerateChildrenOfType<SdtRangeStart>().First();
ChangeCheckboxState(stdStart);
Notes
- Ensure that you have identified the correct content control by checking its tag or other properties.
- The visual representation of the checkbox is determined by the font family and character code specified in the
CheckedState
andUncheckedState
of theCheckBoxProperties
.