Word CheckBox ContentContol OnChange 事件
Posted
技术标签:
【中文标题】Word CheckBox ContentContol OnChange 事件【英文标题】:Word CheckBox ContentContol OnChange Event 【发布时间】:2016-03-11 05:43:20 【问题描述】:我尝试制作一个带有两个复选框的 word 文档,每个复选框将显示/隐藏具有自定义样式的文档的一部分。
我计划根据复选框值设置值 Style.Font.Hidden = True/False,但是...
我发现有3种控件:
Legacy Controls - 这看起来陈旧而丑陋。
ActiveX 控件 - 我可以轻松附加到复选框 onChange 事件,但这些也很丑陋,而且我认为它不是那么安全,而且这可能现在在 mac 上工作。
ContentControls - 这似乎是正确的方法,但我无法附加到正确的事件。 (也有描述一些XML附件,但是我没有用这个,这个好像太复杂了,我不知道。)
你能告诉我如何附加到 CheckBox ContentContol 的 onChange 事件吗?我需要与 ActiveX CheckBox 相同的行为。
【问题讨论】:
这些事件在 beta API 中提供:docs.microsoft.com/en-us/javascript/api/word/… 但我未能成功向它们注册事件处理程序。见:***.com/questions/70421577/… 【参考方案1】:内容控件没有“onChange”事件,因此您无法让内容控件以简单的方式表现得像 ActiveX 复选框。与表单域类似,ContentControls 的代码在进入/退出控件时触发。
为内容控件模拟“onChange”的唯一方法是将内容控件链接到文档中 CustomXMLPart 中的节点,然后使用 Document_ContentControlBeforeStoreUpdate 事件,该事件在 CustomXMLPart 中的节点内容将要发生变化时触发改变。
如果如您的问题所示,这对于您的目的来说太复杂了,您可以使用一个 MacroButton 字段来显示一个看起来像复选框的字体字符(符号)。单击该字段会将该字符交换为另一个看起来已选中的字符。然后再次反向以进行下一次单击。这里有一些示例代码可以帮助您入门。如果您不喜欢我选择的复选框,您可以从 Insert/Symbols/Symbol 中选择其他内容。只需更改字符编号和字体名称即可。
默认情况下,MacroButton 字段在双击时触发。当文档在 AutoOpen 宏中打开时,您可以将其更改为单击一次。
Sub AutoOpen()
Application.Options.ButtonFieldClicks = 1
End Sub
Sub ToggleCheckBox()
Dim iNotChecked As Integer, iChecked As Integer
Dim rngCheck As word.Range
Dim sBkmName As String, sFontName as String
iNotChecked = 111
iChecked = 253
sBkmName = "bkmCheck"
sFontName = "Wingdings"
Set rngCheck = ActiveDocument.Bookmarks(sBkmName).Range
If Asc(rngCheck.Text) = iNotChecked Then
rngCheck.Text = Chr(iChecked)
ActiveDocument.Bookmarks.Add sBkmName, rngCheck
rngCheck.Font.Name = sFontName
ElseIf Asc(rngCheck.Text) = iChecked Then
rngCheck.Text = Chr(iNotChecked)
rngCheck.Font.Name = sFontName
ActiveDocument.Bookmarks.Add sBkmName, rngCheck
End If
End Sub
【讨论】:
以上是关于Word CheckBox ContentContol OnChange 事件的主要内容,如果未能解决你的问题,请参考以下文章