0

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

4

1 に答える 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 に答える