2010-12-26 12 views
0

Ich möchte die Anzahl der Schaltflächen in der Gruppe einer Multifunktionsleiste in Word 2007 begrenzen, wie die Schaltflächen auf der Grundlage der Daten in der generiert werden Datenbank. Siehe das Bild unten. Too many buttons showed. Ich wollte eine begrenzte Anzahl haben, sagen wir 6 oder so in der Multifunktionsleiste mit einem Dialogboxlauncher, der beim Klicken öffnet einen Bereich mit allen Tasten. Gibt es einen Weg, das Gleiche zu tun? Kann mir jemand sagen, wie ich diesen Bereich erstellen soll, wenn jemand auf den Startbildschirm des Dialogfelds klickt?OpenXML - Begrenzung der Anzahl der Schaltflächen in der Gruppe in benutzerdefinierten MS-Word Multifunktionsleiste

Antwort

0

Die Art, wie ich es getan habe, ist, einige (sagen wir 6) der Elemente in der Multifunktionsleiste als Schaltflächen zu laden und alle Elemente als CustomXMlPart im Dokument hinzuzufügen. In dem Dokument habe ich ein Benutzersteuerelement hinzugefügt, das eine Listbox enthielt. Auf der Multifunktionsleiste lade ich alle Elemente aus dem CustomXmlPart und lege sie in die Listbox. Klicken Sie auf der Dialogbox Launcher-Schaltfläche, um das Benutzersteuerelement anzuzeigen/auszublenden, um alle Elemente in der Liste anzuzeigen.

Im Folgenden sind die Schritte im Detail: -

a) Holen Sie sich alle Artikel aus der Datenbank und hält, dass in der Sammlung. b) Generieren Sie das Band XML wie folgt Withe die Tasten 6 aus der obigen Sammlung: -

<?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) Fügen Sie die Sammlung als CustomXMLPart auf das Dokument: -

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) Go Fügen Sie auf der Entwicklerregisterkarte Ihrer Dokumentdatei ein Benutzerformular zum Projekt hinzu und fügen Sie ein Listenfeld hinzu. Schreiben Sie eine Subroutine, die die Elemente aus dem CustomXMlPart lädt, das bereits zum Dokument hinzugefügt wurde, und diese Elemente zur Listbox im Benutzerformular hinzufügt. So etwas wie unten: -

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) Definieren Sie die Unter namens RibbonLoad, die von dem Ereignis onLoad des Bandes (siehe Info RibbonXML) aufgerufen wird. Rufen Sie die LoadItems-Sub aus dieser RibbonLoad-Sub auf.

Sub RibbonLoad(ribbon As IRibbonUI) 
LoadItems 
End Sub 

f) Definieren Sie das folgende Sub, das das Benutzersteuerelement ein-/ausblenden soll. Dies wird auf der onAction der Schaltfläche dialogBoxLauncher aufgerufen. (siehe 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 
Verwandte Themen