Supongo que por propiedades te refieres a Shape Data, que solía llamarse Propiedades personalizadas en la interfaz de usuario y todavía se conoce con ese nombre en la API.
Si no está familiarizado con ShapeSheet, primero debe ver una forma con propiedades personalizadas en ShapeSheet para ver cómo se definen las propiedades. Consulte "What happened to the ShapeSheet?" para obtener información sobre cómo abrir la Hoja de formas en Visio 2010.
El siguiente programa de ejemplo debe comenzar. Este ejemplo asume que tiene el Visio Primary Interop Assembly instalado en su PC y que ha incluido un árbitro en Microsoft.Office.Interop.Visio en su proyecto.
namespace VisioEventsExample
{
using System;
using Microsoft.Office.Interop.Visio;
class Program
{
public static void Main(string[] args)
{
// Open up one of Visio's sample drawings.
Application app = new Application();
Document doc = app.Documents.Open(
@"C:\Program Files\Microsoft Office\Office14\visio content\1033\ASTMGT_U.VST");
// Get the first page in the sample drawing.
Page page = doc.Pages[1];
// Start with the collection of shapes on the page and
// print the properties we find,
printProperties(page.Shapes);
}
/* This function will travel recursively through a collection of
* shapes and print the custom properties in each shape.
*
* The reason I don't simply look at the shapes in Page.Shapes is
* that when you use the Group command the shapes you group become
* child shapes of the group shape and are no longer one of the
* items in Page.Shapes.
*
* This function will not recursive into shapes which have a Master.
* This means that shapes which were created by dropping from stencils
* will have their properties printed but properties of child shapes
* inside them will be ignored. I do this because such properties are
* not typically shown to the user and are often used to implement
* features of the shapes such as data graphics.
*
* An alternative halting condition for the recursion which may be
* sensible for many drawing types would be to stop when you
* find a shape with custom properties.
*/
public static void printProperties(Shapes shapes)
{
// Look at each shape in the collection.
foreach (Shape shape in shapes)
{
// Use this index to look at each row in the properties
// section.
short iRow = (short) VisRowIndices.visRowFirst;
// While there are stil rows to look at.
while (shape.get_CellsSRCExists(
(short) VisSectionIndices.visSectionProp,
iRow,
(short) VisCellIndices.visCustPropsValue,
(short) 0) != 0)
{
// Get the label and value of the current property.
string label = shape.get_CellsSRC(
(short) VisSectionIndices.visSectionProp,
iRow,
(short) VisCellIndices.visCustPropsLabel
).get_ResultStr(VisUnitCodes.visNoCast);
string value = shape.get_CellsSRC(
(short) VisSectionIndices.visSectionProp,
iRow,
(short) VisCellIndices.visCustPropsValue
).get_ResultStr(VisUnitCodes.visNoCast);
// Print the results.
Console.WriteLine(string.Format(
"Shape={0} Label={1} Value={2}",
shape.Name, label, value));
// Move to the next row in the properties section.
iRow++;
}
// Now look at child shapes in the collection.
if (shape.Master == null && shape.Shapes.Count > 0)
printProperties(shape.Shapes);
}
}
}
}
Hola Pat Gracias por su detallada responder. Eso me dio algunas ideas. Me las arreglé para continuar con mi tarea con su ayuda y varios libros. Planeo trabajar estrechamente con Visio durante el siguiente mes o dos. ¿Puedo agregarlo a mis contactos en LinkedIn ya que puedo necesitar su ayuda y consejo? (He enviado una invitación) Gracias de nuevo. Dan –
Daniil, si tiene preguntas relacionadas con el desarrollo de software, pregúnteles sobre el desbordamiento de la pila. Si necesita contactarme en privado, use mi dirección de correo electrónico en mi perfil. - Pat –