private void _go_to_page(IVisio.Pages pages, Models.PageRelativePosition flags, VisioScripting.CommandTarget cmdtarget) { if (pages == null) { throw new System.ArgumentNullException(nameof(pages)); } if (pages.Count < 2) { throw new VisioAutomation.Exceptions.VisioOperationException("Only 1 page available. Navigation not possible."); } int cur_index = cmdtarget.ActivePage.Index; const int min_index = 1; int max_index = pages.Count; int new_index = PageCommands.move_in_range(cur_index, min_index, max_index, flags); if (cur_index != new_index) { var doc_pages = cmdtarget.ActiveDocument.Pages; var page = doc_pages[new_index]; var active_window = cmdtarget.Application.ActiveWindow; active_window.Page = page; } }
internal static int move_in_range(int cur, int min, int max, Models.PageRelativePosition relative_position) { if (max < min) { throw new System.ArgumentOutOfRangeException(nameof(max)); } if (cur < min) { throw new System.ArgumentOutOfRangeException(nameof(cur)); } if (cur > max) { throw new System.ArgumentOutOfRangeException(nameof(cur)); } switch (relative_position) { case VisioScripting.Models.PageRelativePosition.Next: return(System.Math.Min(cur + 1, max)); case VisioScripting.Models.PageRelativePosition.Previous: return(System.Math.Max(cur - 1, min)); case VisioScripting.Models.PageRelativePosition.First: return(min); case VisioScripting.Models.PageRelativePosition.Last: return(max); default: throw new System.ArgumentOutOfRangeException(nameof(relative_position)); } }
public void SetActivePage(VisioScripting.TargetDocument targetdoc, Models.PageRelativePosition flags) { targetdoc = targetdoc.ResolveToDocument(this._client); var docpages = targetdoc.Document.Pages; if (docpages.Count < 2) { return; } var pages = docpages; var cmdtarget = this._client.GetCommandTarget(CommandTargetFlags.RequirePage); this._go_to_page(pages, flags, cmdtarget); }