我想限制 Word 2007 中功能区组中按钮的数量,因为按钮是根据数据库中的数据生成的。见下图。. 我想在带有对话框启动器的功能区中设置有限的数量,例如 6 个左右,单击该对话框启动器将打开一个显示所有按钮的窗格。有没有办法做同样的事情。当有人单击对话框启动器时,有人还可以告诉我如何创建该窗格吗?
问问题
314 次
1 回答
0
我这样做的方法是将功能区中的一些(比如 6 个)项目作为按钮加载,并将所有项目作为 CustomXMlPart 添加到文档中。在文档中,我添加了一个包含列表框的用户控件。在功能区加载时,我从 CustomXmlPart 中获取所有项目并将它们放入列表框中。在对话框启动器按钮上单击,我显示/隐藏用户控件以显示列表中的所有项目。
以下是详细步骤:-
a) 从数据库中获取所有项目并将其保存在集合中。b) 使用上述集合中的 6 个按钮生成如下所示的功能区 XML:-
<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="RibbonLoad">
<ribbon>
<tabs>
<tab id="tabMyTab" label="MyTab">
<group id="grpItems" label="My items">
<button id="test1" label="test1"/>
<button id="test2" label="test2"/>
<button id="test3" label="test3"/>
<button id="test4" label="test4"/>
<button id="test5" label="test5"/>
<button id="test6" label="test6"/>
<dialogBoxLauncher>
<button id="btnShowAllItems" label="Show all custom tags" onAction="ShowAllItems" />
</dialogBoxLauncher>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
c) 将集合作为 CustomXMLPart 添加到文档中:-
static void AddCustomTableXmlPart(WordprocessingDocument document)
{
MainDocumentPart mainDocumentPart = document.MainDocumentPart;
XDocument customTagsXml = GetAllItemsAsCustomXML();
if (mainDocumentPart.GetPartsCountOfType<CustomXmlPart>() > 0)
mainDocumentPart.DeleteParts<CustomXmlPart>(mainDocumentPart.CustomXmlParts);
//Add a new customXML part and then add content
var customXmlPart = mainDocumentPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
//copy the XML into the new part...
using (var ts = new StreamWriter(customXmlPart.GetStream()))
{
ts.Write(customTagsXml.ToString());
ts.Flush();
}
}
d) 转到您的docm 文件的开发人员选项卡,将一个用户窗体添加到项目并添加一个列表框。编写一个子例程,它将加载已添加到文档的 CustomXMlPart 中的项目,并将这些项目添加到用户窗体中的列表框中。如下所示:-
Sub LoadItems()
Dim totalItemsCount As Integer
totalItemsCount = ActiveDocument.CustomXMLParts(ActiveDocument.CustomXMLParts.Count).SelectNodes("//Items")(1).ChildNodes.Count
Dim item As String
For i = 1 To totalItemsCount
item = ActiveDocument.CustomXMLParts(ActiveDocument.CustomXMLParts.Count).SelectNodes("//Items")(1).ChildNodes(i).text
' I had to remove the spaced before adding it as It was throwing errors
item = Replace(item, " ", Empty)
If Len(item) > 1 Then
ItemUserControl.lstItems.AddItem pvargItem:item
End If
Next i
End Sub
e) 定义从功能区的 onLoad 事件调用的名为 RibbonLoad 的子(检查 RibbonXML)。从此 RibbonLoad 子调用 LoadItems 子。
Sub RibbonLoad(ribbon As IRibbonUI)
LoadItems
End Sub
f)定义以下将显示/隐藏用户控件的子。这在 dialogBoxLauncher 按钮的 onAction 上调用。(参见 RibbonXML)
Sub ShowAllItemss(control As IRibbonControl)
If ItemsUserControl.Visible = False Then
If ItemsUserControl.lstItems.ListCount = 0 Then
LoadCustomTags
End If
ItemsUserControl.Show
Else
ItemsUserControl.Hide
End If
End Sub
于 2011-01-04T11:09:33.130 回答