终于找到了很重要的库VisioUtility—-找了好久—在VisioLibrary.cs
    以下是链接
    链接:https://pan.baidu.com/s/1QGOLjn4yBGHCkjZoNDhoeA

    参考链接:
    https://blog.csdn.net/xuexue_wang/article/details/10943629?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-3
    伍华聪
    https://www.cnblogs.com/wuhuacong/archive/2008/05/30/1210525.html

    利用VisioUtility可以得到AxDrawingControl中鼠标点击时间下点击的形状Shape

    1. private void axDrawingControl1_MouseDownEvent(object sender, AxMicrosoft.Office.Interop.VisOcx.EVisOcx_MouseDownEvent e)
    2. {
    3. try
    4. {
    5. if (IsVisioEditable)
    6. {
    7. if (cbMasters.EditValue != null)
    8. {
    9. string s = string.Format("x:{0},y:{1}", e.x, e.y);
    10. string shapename = cbMasters.EditValue.ToString().Trim();
    11. if (!string.IsNullOrEmpty(shapename))
    12. {
    13. Visio.Shape shape = axDrawingControl1.Document.Pages[1].Drop(currentStencil.Masters[shapename], e.x, e.y);
    14. }
    15. }
    16. }
    17. Shape shp = VisioUtility.GetClickedShape(axDrawingControl1, e.x,e.y);
    18. //XtraMessageBox.Show(VisioUtility.MapVisioToWindows(axDrawingControl1, e.x, e.y));
    19. if (shp != null)
    20. {
    21. var point = Topo.Points.Find(a => a.VisioIndex == shp.Index);
    22. //string message = string.Format("点编号{0},类型{1}", point.ID, point.pointType.ToString());
    23. string message = shp.NameU;
    24. InfoEdits.Point p = new InfoEdits.Point();
    25. string ms = "";
    26. InfoEdits.Track t = new InfoEdits.Track();
    27. if (message.Contains("Signal"))
    28. {
    29. p = Topo.Signals.Find(a => a.VisioIndex == shp.Index);
    30. t = Topo.Tracks.Find(a => a.ID == p.TrackID);
    31. ms = string.Format("SignalName ={0} DeltaPos ={1}m", p.Tag, p.DeltaPos);
    32. ms += "\r\n" + string.Format("X ={0},Y ={1}", p.X, p.Y);
    33. ms += "\r\n" + string.Format("Lng ={0}, Lat={1}", p.Lon, p.Lat);
    34. ms += "\r\n" + string.Format("TrackName ={0}, TrackType ={1}", t.Name, t.Type.ToString());
    35. }
    36. else if (message.Contains("Balise"))
    37. {
    38. p = Topo.Balises2.Find(a => a.VisioIndex == shp.Index);
    39. t = Topo.Tracks.Find(a => a.ID == p.TrackID);
    40. ms = string.Format("BaliseName ={0} DeltaPos ={1}m", p.Tag, p.DeltaPos);
    41. ms += "\r\n" + string.Format("X ={0}, Y ={1}", p.X, p.Y);
    42. ms += "\r\n" + string.Format("Lng ={0}, Lat={1}", p.Lon, p.Lat);
    43. ms += "\r\n" + string.Format("TrackName ={0}, TrackType ={1}", t.Name,t.Type.ToString());
    44. }
    45. else if (message.Contains("Joint"))
    46. {
    47. p = Topo.Points.Find(a => a.VisioIndex == shp.Index);
    48. t = Topo.Tracks.Find(a => a.ID == p.TrackID);
    49. ms = string.Format("ID ={0} DeltaPos ={1}m DeltaBear ={2}", p.ID, p.DeltaPos, p.DeltaBear);
    50. ms += "\r\n" + string.Format("X ={0}, Y ={1}", p.X, p.Y);
    51. ms += "\r\n" + string.Format("Lng ={0}, Lat={1}", p.Lon, p.Lat);
    52. ms += "\r\n" + string.Format("TrackName ={0}, TrackType ={1}", t.Name, t.Type.ToString());
    53. }
    54. if (!string.IsNullOrEmpty(ms))
    55. {
    56. toolTipController1.ShowHint(ms, DevExpress.Utils.ToolTipLocation.RightCenter);
    57. }
    58. }
    59. else
    60. {
    61. }
    62. }
    63. catch(Exception ex)
    64. {
    65. WriteLog(ex.Message);
    66. }
    67. }
    1. private void repositoryItemComboBox3_SelectedIndexChanged(object sender, EventArgs e)
    2. {
    3. DoVisioCmds(barEditItem3.EditValue.ToString());
    4. }
    5. /// <summary>
    6. /// 执行Visio的命令
    7. /// </summary>
    8. /// <param name="s"></param>
    9. private void DoVisioCmds(string s)
    10. {
    11. switch (s)
    12. {
    13. case "形状窗口":
    14. visApp.DoCmd((short)VisUICmds.visCmdShapesWindow);
    15. break;
    16. case "属性数据窗口":
    17. visApp.DoCmd((short)VisUICmds.visCmdCustProp);
    18. break;
    19. case "平移和缩放":
    20. visApp.DoCmd((short)VisUICmds.visCmdPanZoom);
    21. break;
    22. case "显示隐藏标尺":
    23. visApp.DoCmd((short)VisUICmds.visCmdViewRulers);
    24. break;
    25. case "显示隐藏网格":
    26. visApp.DoCmd((short)VisUICmds.visCmdViewGrid);
    27. break;
    28. case "大小和位置":
    29. visApp.DoCmd((short)VisUICmds.visCmdSizePos);
    30. break;
    31. default:
    32. break;
    33. }
    34. }