ボタンはデータベース内のデータに基づいて生成されるため、Word 2007 のリボンのグループ内のボタンの数を制限したいと考えています。下の写真を参照してください。. クリックするとすべてのボタンを表示するペインが開くダイアログボックスランチャーを使用して、リボンに6個程度の数を制限したかったのです。同じことをする方法はありますか。誰かがダイアログボックスランチャーをクリックしたときにそのペインを作成する方法を教えてもらえますか?
1 に答える
私が行った方法は、リボン内のアイテムの一部(たとえば、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