代码之家  ›  专栏  ›  技术社区  ›  theycallmemorty

不在资源视图中时是否隐藏属性/工具箱窗格?

  •  14
  • theycallmemorty  · 技术社区  · 15 年前

    每次我在VisualStudio(2005)中查看表单或对话框时,属性和工具箱窗格都会显示在屏幕的右侧。这很好,因为它们对于操作对话框很有用。

    然而,一旦我切换回源代码,这些窗格就会妨碍我。。。有没有办法让他们自动离开?

    4 回复  |  直到 14 年前
        1
  •  4
  •   Graham Conzett    14 年前

    最近,我在VS2010中使用了一个宏,在asp.net MVC3视图中从“代码”视图切换到“设计”视图时显示并隐藏“工具”面板。我认为,它可以很容易地适应你的情况。

    EnvironmentEvents 在VS宏IDE中,在预生成的内容之后初始化文件。

    <System.ContextStaticAttribute()> Public WithEvents CommandEvents As EnvDTE.CommandEvents
    
    
      Public Sub DTEEvents_OnMacrosRuntimeReset() Handles _
      DTEEvents.OnMacrosRuntimeReset
            CommandEvents = DTE.Events.CommandEvents
        End Sub
    
        Private Sub DTEEvents_OnStartupComplete() Handles _
            DTEEvents.OnStartupComplete
            CommandEvents = DTE.Events.CommandEvents
        End Sub
    
        Public Sub CommandEvents_AfterExecute( _
        ByVal Guid As String, _
        ByVal ID As Integer, _
        ByVal CustomIn As Object, _
        ByVal CustomOut As Object) _
        Handles CommandEvents.AfterExecute
    
            If DTE.Commands.Item(Guid, ID).Name = "View.ViewDesigner" Then
                DTE.ExecuteCommand("View.Toolbox")
            End If
    
            If DTE.Commands.Item(Guid, ID).Name = "View.ViewMarkup" Then
                DTE.Windows.Item(Constants.vsWindowKindToolbox).Close()
            End If
    
        End Sub
    

    使用事件的guid而不是if语句可能会更好地优化它。当您使用热键切换视图以及“视图”菜单(而不是上下文菜单)时,该功能会起作用。

        2
  •  2
  •   bh_earth0    7 年前

    1. 菜单>工具>扩展和更新
    2. 安装“可视指挥官”。(现在您有了名为“VCmd”的新菜单)
    3. 按扩展窗格中的添加按钮。(新选项卡W°ndow将打开。)
    4. 写一个扩展名。
    5. 将代码粘贴到下面:
    6. 按Save。然后按编译。然后按Install

    using EnvDTE;
    using EnvDTE80;
    
    public class E : VisualCommanderExt.IExtension
    {
        private EnvDTE80.DTE2 DTE;
        private EnvDTE.WindowEvents windowEvents;
    
        public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package) {
            this.DTE = DTE;
            DTE.Events.WindowEvents.WindowActivated += OnWindowActivated;   
        }
    
        public void Close() {
            // i read somewhere this has to be done on close. 
            // but it gives gives me error on every IDE close. so i commented it .
            //DTE.Events.WindowEvents.WindowActivated -= OnWindowActivated;
        }
    
        private void OnWindowActivated(Window gotFocus, Window lostFocus) {
                HidePropertiesWindowInCodeOrTextView(gotFocus );
        }
    
        public void HidePropertiesWindowInCodeOrTextView(Window gotFocus ) {
               if (gotFocus.Document == null) return;
                  var pwin = DTE.Windows.Item(Constants.vsWindowKindProperties);
                  pwin.AutoHides  = !gotFocus.Caption.EndsWith(" [Design]") ;
        }
    }
    
        3
  •  0
  •   John Deters    15 年前

    我知道这并不是你想要的答案,但这是一种不同的方式,可以让屏幕的真实属性在代码中保持可用,而不会影响自动隐藏(我发现自动隐藏不仅仅是一种帮助,更是一种烦恼)

        4
  •  0
  •   Fano99    4 年前

    对于vs2019:

    我改进了bh_earth0的解决方案。现在,当您跳转到代码时,它保存属性和工具箱的可见性状态。当激活“设计”选项卡时,它将加载窗格的以前状态。

    1. 菜单>扩展>管理扩展

    2. 查找并安装“Visual Commander”。(现在您有了名为“VCmd”的新菜单)

    3. 菜单>“VCmd”>扩展。。。(您将在右侧看到一个扩展窗格)

    4. 选择语言为C#。

    5. 复制并粘贴以下代码:

    6. 按Save。然后按编译。然后按Install

    7. 重新启动Visual Studio并享受:-)

      using EnvDTE;
      using EnvDTE80;
      
      public class E : VisualCommanderExt.IExtension
      {
          private EnvDTE80.DTE2 DTE;
          private EnvDTE.WindowEvents windowEvents;
      
          private bool bPropWinVisible = false;
          private bool bToolWinVisible = false;
      
          public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package) {
              this.DTE = DTE;
              DTE.Events.WindowEvents.WindowActivated += OnWindowActivated;   
          }
      
          public void Close() {
          }
      
          private void OnWindowActivated(Window gotFocus, Window lostFocus) {
              if (gotFocus.Document == null) return;
              if (lostFocus.Document == null) return;
      
              var pwin = DTE.Windows.Item(Constants.vsWindowKindProperties);
              var twin = DTE.Windows.Item(Constants.vsWindowKindToolbox);
      
              if(gotFocus.Caption.EndsWith(".cs [Design]") && lostFocus.Caption.EndsWith(".cs") ) {
                  pwin.AutoHides = bPropWinVisible;
                  twin.AutoHides = bToolWinVisible;
              }
              else if(gotFocus.Caption.EndsWith(".cs") && lostFocus.Caption.EndsWith(".cs [Design]")) {
                  bPropWinVisible = pwin.AutoHides;
                  bToolWinVisible = twin.AutoHides;
                  pwin.AutoHides = true;
                  twin.AutoHides = true;
              }
          }
      }
      
        5
  •  -1
  •   Nick Meyer    15 年前