/// <summary> /// Метод выделения вершин /// </summary> /// <param name="key"></param> /// <param name="window"></param> public void Select(int key, Visio.Window window) { if (window != null) { window.DeselectAll(); switch (key) { // Выделить все вершины case 1: foreach (var node in vertices) { window.Select(node.Value, 2); } break; // Выделить все соединенные вершины case 2: foreach (var node in vertices) { if (node.Value.ConnectedShapes(Visio.VisConnectedShapesFlags.visConnectedShapesAllNodes, "").Length != 0) { window.Select(node.Value, 2); } } break; // Выделить все несоединенные вершины case 3: foreach (var node in vertices) { if (node.Value.ConnectedShapes(Visio.VisConnectedShapesFlags.visConnectedShapesAllNodes, "").Length == 0) { window.Select(node.Value, 2); } } break; // Выделить все ребра case 4: foreach (var edge in edges) { window.Select(edge.Value, 2); } break; default: throw new ArgumentException("Ключ не соответствует допустимому диапозону"); } } }
/// <summary> /// 导出visio的Page中的所有形状到word中 /// </summary> /// <param name="Page">要进行粘贴的Visio中的页面</param> /// <param name="range">此时word文档中的全局range的位置或者范围</param> /// <remarks>在此方法中,会将visio指定页面中的所有形状进行选择,然后进行组合,最后将其输出到word中; /// 由局部安全的原则,在进行绘图前,将另起一行,并将段落样式设置为“图片”样式</remarks> private void Export_VisioPlanview(Page Page, ref Word.Range range) { Microsoft.Office.Interop.Visio.Application app = Page.Application; // Window wnd = default(Window); wnd = app.ActiveWindow; wnd.Page = Page; wnd.Activate(); //这里要将ShowChanges设置为True,否则下面的SelectAll()方法会被禁止。 app.ShowChanges = true; wnd.SelectAll(); // ---------------------- 耗时代码1:复制Visio的Page中的所有形状 //而且在这一步的时候Visio的窗口中可能会弹出子窗口 wnd.Selection.Copy(); //这一步也可能会导致Visio的窗口中弹出子窗口 wnd.DeselectAll(); //关闭所有的子窗口 //Debug.Print(app.ActiveWindow.Windows.Count) ‘即使只显示出一个子窗口,这里也会返回10 //For Each subWnd As Visio.Window In app.ActiveWindow.Windows // subWnd.Visible = False //Next //根据实际情况:每次都只弹出“外部数据”这一子窗口,所以在这里就只对其进行单独隐藏。 wnd.Windows.ItemFromID((Int32)Visio.VisWinTypes.visWinIDExternalData).Visible = false; //让窗口的显示适应页面 wnd.ViewFit = (Int32)Visio.VisWindowFit.visFitPage; Word.Range with_2 = range; //新起一行,并设置新段落的段落样式为图片 NewLine(range, ParagraphStyle.picture); // ---------------------- 耗时代码2:将Visio的Page中的所有形状粘贴到Word中(不可以用:DataType:=23) with_2.PasteSpecial(DataType: Word.WdPasteDataType.wdPasteOLEObject, Placement: Word.WdOLEPlacement.wdInLine); Word.InlineShape shp = default(Word.InlineShape); range.Select(); range.Application.Selection.MoveLeft(Unit: Word.WdUnits.wdCharacter, Count: 1, Extend: Word.WdMovementType.wdExtend); shp = range.Application.Selection.InlineShapes[1]; //约束图形的宽度,将其限制在word页面的正文宽度之内 WidthRestrain(shp, ContentWidth); //刷新visio屏幕 app.ShowChanges = true; }
} private void gridView1_FocusedRowObjectChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowObjectChangedEventArgs e) { if (e.RowHandle > 0) { // get the selcted cellRow int[] selRows = ((GridView)gridControl1.MainView).GetSelectedRows(); // get a seleted row using handle position DataRowView selRow = (DataRowView)(((GridView)gridControl1.MainView).GetRow(e.RowHandle)); // read a Shape of selected Row var shape = (Shape)selRow["Shape"]; //var uId = selRow["UID"].ToString(); //var shape = page.Shapes[uId]; window.DeselectAll(); //window.Select((Shapes)value, (short)VisSelectArgs.visSelect); this.TopMost = true; // Show the selectet Shape window.Select(shape, (short)VisSelectArgs.visSelect); ScrollViewToShape(shape); } } private void SearchDialog_FormClosing(object sender, FormClosingEventArgs e)
private static void _invert_selection(IVisio.Window window) { if (window == null) { throw new System.ArgumentNullException(nameof(window)); } if (window.Page == null) { throw new System.ArgumentException("Window has null page", nameof(window)); } var page = (IVisio.Page)window.Page; var shapes = page.Shapes; var all_shapes = shapes.ToEnumerable(); var selection = window.Selection; var selected_set = new HashSet <IVisio.Shape>(selection.ToEnumerable()); var shapes_to_select = all_shapes.Where(shape => !selected_set.Contains(shape)).ToList(); window.DeselectAll(); window.Select(shapes_to_select, IVisio.VisSelectArgs.visSelect); }