Pregunta

Quiero limitar el número de botones en el grupo de una cinta en Word 2007 que los botones están siendo generados sobre la base de los datos en la base de datos. Ver la foto de abajo. Demasiados botones mostró. Yo quería tener número limitado, digo 6 o así en la cinta con un dialogboxlauncher que cuando se hace clic, se abrirá un panel que muestra todos los botones. ¿Hay alguna manera de hacer lo mismo. También puede alguien decirme cómo crear ese panel cuando alguien hace clic en el lanzador caja de diálogo?

¿Fue útil?

Solución

La forma en que lo hice es cargar algunos (dicen 6) de los elementos de la cinta como botones y añadir todos los elementos como el CustomXMlPart en el documento. En el documento, añadí un control de usuario que contenía un cuadro de lista. De la carga de la cinta, consigo todos los elementos de la CustomXmlPart y ponerlos en el cuadro de lista. En el botón lanzador caja de diálogo clic, me mostrar / ocultar el control de usuario para mostrar todos los elementos de la lista.

A continuación se presentan los pasos en detalle: -

a) Obtener todos los elementos de la base de datos y tener eso en la colección. b) Generar el código XML de la cinta como la siguiente withe los 6 botones de la colección anterior: -

<?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) Añadir la colección como la CustomXMLPart al documento: -

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) Ir a la ficha Programador de su archivo DOCM, añadir un formulario de usuario con el proyecto y añadir un cuadro de lista a la misma. Escribir una subrutina que cargar los elementos de la CustomXMlPart ya añadido al documento y agregar esos elementos al cuadro de lista en el formulario de usuario. Algo parecido a continuación: -

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) Definir el sub llamado RibbonLoad que se llama desde el evento onLoad de la cinta (comprobar el RibbonXML). Ir al sub LoadItems de esta sub RibbonLoad.

Sub RibbonLoad(ribbon As IRibbonUI)
LoadItems
End Sub

f) Definir los siguientes sub que mostrará / ocultar el control de usuario. Esto se conoce en la onAction del botón dialogBoxLauncher. (Ver la 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top