首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何隐藏Microsoft中为绘图形状显示的弹出菜单项?

如何隐藏Microsoft中为绘图形状显示的弹出菜单项?
EN

Stack Overflow用户
提问于 2020-07-09 19:50:11
回答 2查看 320关注 0票数 0

当右键单击Visio中的绘图形状时,我想隐藏一些显示在弹出菜单中的项。

我试过的密码。没有任何变化。

代码语言:javascript
运行
复制
 Sub HideVisioMenus()
    Dim uiObj As Visio.UIObject
    Dim menuSetObj As Visio.MenuSet
    Dim menuItemsObj As Visio.menuitems
    Dim i As Integer
    Set uiObj = Visio.Application.BuiltInMenus
    Set menuSetObj = uiObj.MenuSets.ItemAtID(visUIObjSetDrawing)    
    Set menuItemsObj = menuSetObj.Menus(8).menuitems
    'Get the Show ShapeSheet menu item by its CmdNum property.
    For i = 0 To menuItemsObj.Count - 1
        Debug.Print menuItemsObj.Item(i).Caption
        If menuItemsObj(i).CmdNum = visCmdWindowShowShapeSheet Then
            menuItemsObj.Item(i).Visible = False            
            Exit For
        End If
    Next i   
    Visio.Application.SetCustomMenus uiObj    
 End Sub
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-09 23:38:01

您使用的是哪个版本的Visio?我花了很长时间使用RibbonUI,忘记了使用CommandBars隐藏/删除项目。

老实说,我不记得它是否适用于丝带。所以我到处摆弄,这真的很管用!

不过,我认为你需要这个菜单id:

Visio.visUIObjSetCntx_DrawObjSel

但是,遍历该集合中的项并不会显示Show ShapeSheet项。所以这个项目是由Visio以某种特殊的方式添加的。

我篡改了一些代码,并能够隐藏一切,但显示、ShapeSheet、超链接除外。不知道怎么处理掉这些东西!

代码语言:javascript
运行
复制
Sub DinkWithRightClickShapeMenu()

  '// The following example demonstrates how to retrieve
  '// the currently active user interface for your document
  '// without replacing the application-level custom user
  '// interface, if any.
  
  '// Check if there are document custom menus.
  If ThisDocument.CustomMenus Is Nothing Then
    'Check if there are Visio custom menus.
    If Visio.Application.CustomMenus Is Nothing Then
      'Use the built-in menus.
      Set visUiObj = Visio.Application.BuiltInMenus
    Else
      'Use the Visio custom menus.
      Set visUiObj = Visio.Application.CustomMenus.Clone
    End If
  Else
    'Use the file custom menus
    Set visUiObj = ThisDocument.CustomMenus
  End If
  
  
  Dim menuSetObj As Visio.MenuSet
  Dim menuItemsObj As Visio.MenuItems
  Dim i As Integer, j As Integer
  
  '// This is the menu set for right-clicking a shape:
  Set menuSetObj = visUiObj.MenuSets.ItemAtID(Visio.visUIObjSetCntx_DrawObjSel)
  'Set menuSetObj = visUIObj.MenuSets.ItemAtID(Visio.visUIObjSetCntx_BuiltinMenus)
  
  '// List the menu items in the menu set.
  '// For Each doesn't work:
  Dim mnu As Visio.Menu
  Dim mnuItem As Visio.MenuItem
  For i = 0 To menuSetObj.Menus.Count - 1
  
    Set mnu = menuSetObj.Menus.Item(i)
    Debug.Print "Menu: " & i & ". '" & mnu.Caption & "'"
        
    For j = 0 To mnu.MenuItems.Count - 1
      Set mnuItem = mnu.MenuItems(j)
      Debug.Print j, mnuItem.Caption
      
      '// Hide every menu item:
      mnuItem.Visible = False
      '// This was a test to see if I could change the menu text:
      '//mnuItem.Caption = mnuItem.Caption & " woohoo"
      Debug.Print vbTab & mnuItem.Caption
    Next j
    
  Next i
  
  '// Unfortunately, there are still two items left:
  '// - Show ShapeSheet
  '// - Hyperlinks...
    
  Call Visio.ActiveDocument.SetCustomMenus(visUiObj)
  'ThisDocument.SetCustomMenus uiObj
  'Call Visio.Application.SetCustomMenus(visUiObj)

  
  '// Restore the normal menus running this in the
  '// Immediate window:
  'Visio.ActiveDocument.ClearCustomMenus
  
  '// Cleanup:
  Set mnuItem = Nothing
  Set mnu = Nothing
  Set menuSetObj = Nothing
  Set visUiObj = Nothing
  
End Sub
票数 1
EN

Stack Overflow用户

发布于 2020-07-14 20:48:04

也许你正在寻找的实际上是禁用开发者模式?(在设置中)。取消对上下文菜单中隐藏"ShapeSheet“命令的检查。请注意,默认情况下,开发人员模式已被禁用。您还可以按以下方式以编程方式关闭它:

代码语言:javascript
运行
复制
Application.Settings.DeveloperMode = False

FYI:还有其他方法,比如按注册表设置禁用(管理策略)。我在这里有一个小小的注解:https://unmanagedvisio.com/disabling-visio-built-in-commands/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62822632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档