每次在Visual Studio(2005)中查看表单或对话框时,“属性”和“工具箱”窗格都会显示在屏幕的右侧。这很好,因为它们对于操作对话框很有用。
然而,一旦我切换回源代码,这些窗格就会妨碍...有没有办法让它们自动消失?
答案 0 :(得分:4)
我最近在VS2010中做了一些事情,使用一个宏来显示和隐藏工具面板,当在asp.net MVC3视图中从代码切换到设计视图时。我认为它可以很容易地适应你的情况。
在预生成的内容之后,它位于VS Macro IDE中的EnvironmentEvents
类文件中。
<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语句可能更好地优化它。当您使用热键切换视图以及视图菜单时,它可以工作,但不能使用上下文菜单。
答案 1 :(得分:2)
for vs2015:
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]") ;
}
}
答案 2 :(得分:0)
我没有放弃屏幕右侧的空间,而是将我的属性和工具箱窗格拖到托管解决方案资源管理器和类视图等的左侧框架上。我宁愿有一个多个 - 屏幕一侧的用途框比包围的代码要好。如果您同时需要它们,则可以将工具箱放在解决方案资源管理器窗格中,然后将属性窗格堆叠在解决方案资源管理器下,这样可以随时保留一些属性以及工具箱。
我知道这不是你想要的答案,但这是一种不同的方式来保持屏幕不动产代码而不会搞乱自动隐藏(我发现自动隐藏真的是一种烦恼而不是帮助。)
答案 3 :(得分:0)
对于 vs2019:
我改进了 bh_earth0 的解决方案。现在,当您跳转到代码时,它会保存属性和工具箱的可见性状态。当设计选项卡被激活时,它会加载窗格的先前状态。
菜单 > 扩展 > 管理扩展
找到并安装“Visual Commander”。 (现在您有了名为“VCmd”的新菜单)
Menu > "VCmd" > Extensions ...(你会在右边看到一个扩展面板)
在扩展面板上按添加按钮。 (新标签窗口将打开。)
为扩展写一个名称(例如 AutoHide)。
选择语言为 C#。
复制并粘贴以下代码:
按保存。然后按编译。然后按安装
重新启动 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;
}
}
}
答案 4 :(得分:-1)
如果单击这些工具窗口上的“图钉”图标,则可以切换窗口是始终打开,还是仅在鼠标靠近它们时打开。当然,有时候我的鼠标朝那个方向偏离,当我不想要它们时会弹出它们,但这就是生命...